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

ton*_*nga 5 java activemq-classic jms spring-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;
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

这是消息监听器之一:

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);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

simpleSend()sender类中调用方法后,订阅此主题的所有侦听器都将异步获取此消息.但我想知道此特定是否CustomerStatusListener收到来自邮件发件人的邮件.如何异步进行?我假设我不能ReplyTo像其中一个答案中建议的那样在发送者和监听器中使用,如果我想异步地进行它.我需要在发送方和监听器类中添加什么才能从侦听器获取消息接收确认?

小智 6

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

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

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