我正在使用Spring JMS和ActiveMQ异步地将消息从一个发件人发送到多个侦听器。所有侦听器都订阅ActiveMQ主题,以便可以将消息传递给它们。我想知道特定的侦听器是否从发件人那里获取了消息。有没有办法实现这个目标?
编辑:添加了JMS发件人和监听器类
这是我的邮件发件人类:
public class CustomerStatusSender {
private JmsTemplate jmsTemplate;
private Topic topic;
public void setJmsTemplate(JmsTemplate jmsTemplate) {
this.jmsTemplate = jmsTemplate;
}
public void setTopic(Topic topic) {
this.topic = topic;
}
public void simpleSend(final String customerStatusMessage) {
jmsTemplate.send(topic, new MessageCreator() {
public Message createMessage(Session session) throws JMSException {
TextMessage message = session.createTextMessage("hello from sender.");
message.setStringProperty("content", customerStatusMessage);
return message;
}
});
}
}
这是消息监听器之一:
public class CustomerStatusListener implements MessageListener {
public void onMessage(Message message) {
if (message instanceof TextMessage) {
try {
System.out.println("Subscriber 1 got you! The message is: "
+ message.getStringProperty("content"));
} catch (JMSException ex) {
throw new RuntimeException(ex);
}
}
}
}
在发送者类中调用simpleSend()
方法后,订阅此主题的所有侦听器都将异步获取此消息。但我想知道这个特定的CustomerStatusListener
是否收到来自邮件发件人的邮件。如何异步进行?我假设我不能像其中一个答案中建议的那样在发件人和监听器中使用ReplyTo
,如果我想异步进行的话。我需要在发送方和侦听器类中添加什么才能从侦听器获取消息接收确认?
答案 0 :(得分:6)
之前我遇到过这样的情况。我使用了两个主题来处理场景。第一个主题用于发布,第二个主题用于收据。这是我在我的应用程序中的流程。
我希望它能解决你的问题..
答案 1 :(得分:4)
您必须设置replyTo并在收到消息时让侦听器回复。您可以为回复创建TemporaryQueue。