【发布时间】:2013-11-26 03:56:32
【问题描述】:
我正在使用 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);
}
}
}
}
在 sender 类中调用simpleSend() 方法后,所有订阅该主题的监听器都会异步获取该消息。但我想知道这个特定的CustomerStatusListener 是否收到来自消息发送者的消息。如何异步执行?如果我想异步执行,我假设我不能按照答案之一中的建议在发送者和侦听器中使用ReplyTo。我需要在发送者和侦听器类中添加什么才能从侦听器获取消息接收确认?
【问题讨论】:
-
您多次提到“异步”,但您建议您需要“同步”样式的行为,即客户端发送消息但需要回复才能继续。如果您不想同步使用 JMS,那么您可以让客户端发送消息然后轮询数据库以获取回复记录。您的侦听器使用该消息,然后在完成写入回复表(可能包含侦听器编号、custName、日期等)后,客户端将继续进行下一次轮询并继续处理。
-
感谢您的建议。刚刚更新了我的帖子以显示消息发送者和听众,以明确我想要做什么。基本上,我只想在其中一个听众收到消息时添加消息回执确认,以便发件人知道听众
CustomerStatusListener已经收到消息。有没有简单的方法可以做到这一点?
标签: java jms activemq spring-jms