1
我正在使用獨立運行的HornetQ(v2.2.13)使用者讀取由JBOSS服務器(7.1.1 final)發佈的Persistent主題。一切都很好(在2-6之間),然後消費者停止接收來自主題的消息。從服務器上的日誌文件中,我看到數據不斷被泵入管道,但消費者日誌文件指示客戶端停止讀取數據。我從客戶端推斷說,上次從主題讀取消息的時間是12:00:00,服務器日誌說上次向主題推送消息的時間是14:00:00。HornetQ消費者在N小時後停止接收消息
我試過調整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!");
}
我在服務器端沒有看到有關斷開連接的任何日誌,只有當我看到有關斷開連接的任何消息時,我纔在客戶端和客戶端說它無法重新連接之前停止服務器。關於TX,我一收到每封郵件就會收到。 – FloppyDisk 2012-04-30 15:26:59
沒有辦法複製它或有更多的信息,我只能猜測。我們已經測試過這種情況,我們沒有發現任何問題。我的猜測是你沒有配置分頁,另一個訂閱導致系統阻塞。你應該確保你沒有死亡訂閱(你創建了一個訂閱並且忘了它)或者配置分頁。你爲什麼不把討論跳到hornetq用戶論壇,在那裏你可以提供更多的信息? – 2012-04-30 20:30:42
我會在今天晚些時候或明天早上在那裏開始一個線程。謝謝! – FloppyDisk 2012-05-01 16:46:39