繁体   English   中英

如何知道侦听器是否在JMS中获取消息?

[英]How to know if a listener gets the message in JMS?

我正在使用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 ,如果我想异步地执行其中一个答案。 我需要在发送方和侦听器类中添加什么才能从侦听器获取消息接收确认?

我之前遇到过这样的情况。 我使用了两个主题来处理场景。 第一个主题用于发布,第二个主题用于收据。 这是我在我的应用程序中的流程。

  1. 发件人向第一个主题发布“请求”消息。
  2. 侦听器在侦听Message <Request>对象时收到消息。
  3. 处理完消息后,Listener将Message <Ack>对象发送到2nd Topic。
  4. 发件人依次侦听Message <Ack>对象收到它。 我添加了有关侦听器的可识别信息,以找出哪些侦听器最终得到了我的请求消息<Request>。

我希望它能解决你的问题..

您必须设置replyTo并在收到消息时让侦听器回复。 您可以为回复创建TemporaryQueue。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM