在ActiveMQ Messaging中订阅多个主题目标

时间:2014-05-15 05:49:58

标签: java activemq

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

    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();

        }

1 个答案:

答案 0 :(得分:1)

  

此外,我想要主题消息(不同的目的地)   在按钮操作中收到,而不是使用Message Listener。

JMS提供程序的重点是监听生产者发布的消息,并具有异步通信通道,生产者和侦听器在该通道中解耦。当你说你想在按钮动作中接收消息时,它相当于说“当发布者制作消息时我真的不在乎,但是当我感觉到时我会听” - 这不适合使用一个JMS。可能是您有消息的队列,并根据某些用户操作一个接一个地选择。

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