当前位置: 首页 > 知识库问答 >
问题:

如何知道监听器是否在JMS中得到消息?

华良平
2023-03-14
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。我需要在sender和listener类中添加什么才能从listener获得消息接收确认?

共有1个答案

公西志文
2023-03-14

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

  1. 发件人向第一个主题发布“请求”邮件。
  2. 侦听器在侦听消息 对象时接收消息。
  3. 处理完消息后,侦听器将消息 对象发送到第二个主题。
  4. 发送方依次监听消息 对象接收消息。我添加了关于侦听器的可识别信息,以找出哪些侦听器最终获得了我的请求消息

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

 类似资料:
  • 在与JMS合作的过程中,我有一个疑问。据我所知,创建同步消息消费者是可能的。但是,我必须以一定的频率启动它,因为事实上没有侦听器。接下来,为了同步使用队列中的消息,我可以创建一个MDB并将池设置为1。我认为这不是一个好的解决办法。 我的目标是在消息出现在队列中时同步地使用它们。从我的观点来看,上述解决方案并不好:1。不时推出的消费者。2.MDB(通常异步)和池设置为1。 有什么适合我的解决方案吗?

  • 目前,我正在开发一个独立的Java应用程序,它连接到Websphere MQ以发送和接收消息。 流处于异步模式,我们使用类来实现,以便在消息准备就绪时从队列中检索消息。使用侦听器初始化消费者的代码如下: 方法将从池中返回连接,该池使用Apache Commons池库实现。 我的问题是,只要程序在运行,从池中分配给侦听器的连接是否会处于活动状态并绑定到该侦听器?或者该连接是间歇使用的,并且可以被其他

  • 使用twilio-chat.js我如何在一个频道上监听消息?我找到了这个问题,它问如何在多个频道上收听,但我找不到任何东西描述如何在一个频道上做到这一点。

  • 问题内容: 暂时禁用消息侦听器的好方法是什么?我要解决的问题是: 消息侦听器接收到JMS消息 尝试处理该消息时出现错误。 我等待系统再次准备就绪,以便能够处理该消息。 在系统准备就绪之前,我不再需要任何消息,因此… …我想禁用消息监听器。 我的系统已准备好再次处理。 处理失败的消息,并确认JMS消息。 再次启用消息监听器。 现在,我正在使用Sun App Server。我通过在MessageCon

  • 但我需要在通过快照获取所有数据后调用一个方法。如何实现?我应该测试什么?