Spring JMS 生产者和消费者交互
Spring JMS Producer and Consumer interaction
我如何确定消费者是否已经从生产者那里收到消息,或者我如何通知生产者该消息已经 sent/consumed 在 Spring JMS 中?
需要在生产者端使用org.springframework.jms.core.JmsTemplate.sendAndReceive(...)
,在消费者端使用request/reply,容器中设置的MessageListener方法必须return一个值。
或者让您的生产者订阅 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());
}
});
我如何确定消费者是否已经从生产者那里收到消息,或者我如何通知生产者该消息已经 sent/consumed 在 Spring JMS 中?
需要在生产者端使用org.springframework.jms.core.JmsTemplate.sendAndReceive(...)
,在消费者端使用request/reply,容器中设置的MessageListener方法必须return一个值。
或者让您的生产者订阅 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());
}
});