Я использую потребитель HornetQ (v2.2.13), работающий автономно, для чтения постоянной темы, опубликованной сервером JBOSS (7.1.1 final). Все идет хорошо в течение нескольких часов (между 2-6), а затем потребитель просто перестает получать сообщения из темы. Из файла журнала на сервере я вижу, что данные продолжают перекачиваться по каналу, но файл журнала потребителя указывает, что клиент перестал читать данные. Я сделал вывод из того, что клиент сказал, что в последний раз он читал сообщение не по теме, было 12:00:00, а журнал сервера говорит, что последний раз, когда он отправил сообщение в тему, было 14:00:00.
Я пытался настроить конфигурации HornetQ, но, похоже, это не работает в течение длительного времени.
Код, который я использую для связи с темой, выглядит следующим образом.
private TransportConfiguration getTC(String hostname) {
Map<String,Object> params = new HashMap<String, Object>();
params.put(TransportConstants.HOST_PROP_NAME, hostname);
params.put(TransportConstants.PORT_PROP_NAME, 5445);
TransportConfiguration tc = new TransportConfiguration(NettyConnectorFactory.class.getName(), params);
return tc;
}
private Topic createDestination(String destinationName) {
Topic topic = new HornetQTopic(destinationName);
return topic;
}
private HornetQConnectionFactory createCF(TransportConfiguration tc) {
HornetQConnectionFactory cf = HornetQJMSClient.createConnectionFactoryWithoutHA(JMSFactoryType .CF, tc);
return cf == null ? null : cf;
}
Фрагмент кода, который создает сеанс и запускает его:
TransportConfiguration tc = this.getTC(this.hostname);
HornetQConnectionFactory cf = this.createCF(tc);
cf.setRetryInterval(4000);
cf.setReconnectAttempts(10);
cf.setConfirmationWindowSize(1000000);
Destination destination = this.createDestination(this.topicName);
logger.info("Starting Topic Connection");
try {
this.connection = cf.createConnection();
connection.start();
this.session = connection.createSession(transactional, ackMode);
MessageConsumer consumer = session.createConsumer(destination);
consumer.setMessageListener(this);
logger.info("Started topic connection");
} catch (Exception ex) {
ex.printStackTrace();
logger.error("EXCEPTION!");
}