0
如何确定消费者是否已收到来自生产者的消息,或者如何通知生产者消息已在Spring JMS中发送/消耗?Spring JMS生产者和消费者互动
如何确定消费者是否已收到来自生产者的消息,或者如何通知生产者消息已在Spring JMS中发送/消耗?Spring JMS生产者和消费者互动
您需要在生产者端和消费者端使用org.springframework.jms.core.JmsTemplate.sendAndReceive(...)
的请求/回复,容器中设置的MessageListener方法必须返回一个值。
或使生产者订阅ActiveMQ.Advisory.MessageConsumed.Queue
当消息是由具有类似于orignalMessageId
获得一些性能消耗通知,采取这里http://activemq.apache.org/advisory-message.html
一看,你可以使用它像这样:
Destination advisoryDestination = org.apache.activemq.advisory.AdvisorySupport
.getMessageConsumedAdvisoryTopic(session.createQueue("yourQueue"));
MessageConsumer consumer = session.createConsumer(advisoryDestination);
consumer.setMessageListener(new MessageListener() {
@Override
public void onMessage(Message msg) {
System.out.println(msg);
System.out.println(((ActiveMQMessage) msg).getMessageId());
ActiveMQMessage aMsg = (ActiveMQMessage) ((ActiveMQMessage) msg).getDataStructure();
System.out.println(aMsg.getMessageId());
}
});
如果你只是想通知,那么你可以使用AUTO_ACK模式,但如果你需要在异常情况下重新交付,那么你应该使用transacted =“true”。这已经在SO上被问到了。检查此:http://stackoverflow.com/questions/9095471/getting-a-simple-spring-jms-client-acknowledge-to-work – Tarun