接收來自wildfly JMS隊列消息從wildfly JMS隊列接收消息時,我遇到了一個棘手的問題,我的代碼是打擊:如何使用消費者
Session produceSession = connectionFactory.createConnection().createSession(false, Session
.CLIENT_ACKNOWLEDGE);
Session consumerSession = connectionFactory.createConnection().createSession(false, Session
.CLIENT_ACKNOWLEDGE);
ApsSchedule apsSchedule = new ApsSchedule();
boolean success;
MessageProducer messageProducer = produceSession.createProducer(outQueueMaxusOrder);
success = apsSchedule.sendD90Order(produceSession,messageProducer, d90OrderAps);
if (!success) {
logger.error("Can't send APS schedule msg ");
} else {
MessageConsumer consumer = consumerSession.createConsumer(inQueueDeliveryDate);
data = apsSchedule.receiveD90Result(consumerSession,consumer);
}
則漸入receiveD90Result():
public DeliveryData receiveD90Result(Session session, MessageConsumer consumer) {
DeliveryData data = null;
try {
Message message = consumer.receive(10000);
if (message == null) {
return null;
}
TextMessage msg = (TextMessage) message;
String text = msg.getText();
logger.debug("Receive APS d90 result: {}", text);
ObjectMapper mapper = new ObjectMapper();
data = mapper.readValue(text, DeliveryData.class);
} catch (JMSException je) {
logger.error("Can't receive APS d90 order result: {}", je.getMessage());
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
consumer.close();
} catch (JMSException e) {
e.printStackTrace();
}
}
return data;
}
但是,當實現consumer.receive(10000)時,項目不能從隊列中獲取消息。 如果我使用MDB異步方式偵聽隊列,我可以從隊列中獲取消息。 如何解決它?我花了2天時間解決它,我真的沒有想到,任何人都可以幫助我?Thx!Thx!Thx!
使用異步方式獲取消息是否屬實?但我只是想用同步的方式在wildfly中從jms隊列接收消息,代碼不會拋出任何異常。 –
您可以使用同步的方式來獲取消息,您應該a)將請求與響應匹配,因爲訂單或處理沒有保證 - 一個應用程序可能會回覆發佈消息可能比另一個應用程序更快b)在確認之前要輪詢多久消息爲「丟失」。如果你正在得到一個特定的堆棧跟蹤,請發佈你的問題 –