接收来自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)在确认之前要轮询多久消息为“丢失”。如果你正在得到一个特定的堆栈跟踪,请发布你的问题 –