我正在使用独立运行的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!");
}
答案 0 :(得分:1)
您不会在服务器端获得有关服务器断开连接的任何日志。
您是否尝试使用客户端故障检查周期和其他ping参数?
虚拟机设置怎么样?
您如何确认这些消息?我看到你创建了它作为事务。你收到消息时确定要提交TX吗?