【问题标题】:Subscribe to multiple topic destination in ActiveMQ Messaging在 ActiveMQ 消息传递中订阅多个主题目标
【发布时间】:2014-07-03 10:16:16
【问题描述】:

发布者将消息发布到不同的目的地。我的客户需要一一订阅并获取这些目的地中的所有这些消息。意味着我想使用来自多个主题的消息。此外,我希望在按钮操作中接收主题消息(不同的目的地),而不是使用消息侦听器。有人可以帮忙吗? 我的部分代码是。

    MessageConsumer consumer = null;
    if (isDurableSubscription) {

        // the subscription Name assigned to a durable subscription must be unique within a given client ID.
        consumer = session.createDurableSubscriber( topic, subscriptionName );  
    } else {
        consumer = session.createConsumer( topic ); 
    }

    log.finest("consumer = " + consumer );

    consumer.setMessageListener( this );

    conn.start();

}

public void onMessage(Message message) {
    if ( message instanceof TextMessage ) {

        try {
            TextMessage txtMessage = (TextMessage) message;

            String text = txtMessage.getText();
            this.msg = text;
            System.out.println(text);
            log.finest("Message processed ...");

            session.commit();

        }

【问题讨论】:

    标签: java activemq


    【解决方案1】:

    我还希望主题消息(不同的目的地)是 在按钮操作中接收,而不是通过使用消息侦听器。

    JMS 提供者的全部意义在于监听生产者发布的消息,并拥有一个异步通信通道,其中生产者和监听器是分离的。当你说你想在一个按钮动作中接收消息时,这相当于说“我真的不在乎发布者何时产生消息,但我会在我喜欢的时候听”——这不适合使用一个 JMS。可能是一个队列,您在其中有消息并根据某些用户操作一个接一个地选择。

    在客户端确认之前,发布者不会将消息标记为已传递(基于您的配置方式),在您的情况下(即使可能),它可能需要很长时间并且消息可能会过期。使用 JMS 实现此目的的一种方法是让您的内部数据结构保存所有消息(在使用侦听器从主题中获取它们之后),然后在按钮操作上对其进行处理。但是您将失去 JMS 提供程序的所有好处(持久性、客户端关闭时消息丢失等)。

    【讨论】:

      猜你喜欢
      • 2014-01-21
      • 2015-06-16
      • 1970-01-01
      • 2016-11-01
      • 1970-01-01
      • 2019-04-20
      • 2016-09-19
      • 2018-04-19
      • 1970-01-01
      相关资源
      最近更新 更多