Activemq订阅多个主题

时间:2014-01-03 17:02:57

标签: java jms activemq

我一直在尝试使用activemq和java从tcp服务器订阅多个主题。

谷歌可以告诉我,我可以使用通配符或复合目的地来做到这一点然而,主题的命名方式对通配符非常不友好。当我尝试将目标设置为“topic1,topic2”时,我一直收到错误,说如果我只是单独收听topic1或topic2,那么订阅工作顺利时,我无权使用这些主题。

有些人还建议我可以更改activemq.xml文件以在那里设置代理,但我不明白这些是如何工作的。如果这是解决方案,也许有人可以腾出宝贵的时间向我解释一下?

感谢您的时间。

祝你好运

更具体地说,代码附在此处:

import javax.jms.*;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.log4j.BasicConfigurator;

public class Consumer {
 // URL of the JMS server
 private static String url = "tcp://datafeeds.networkrail.co.uk:61619";
 private static String username = "my username";
 private static String password = "my password";
 private static String topic = "topic1";

 public static void main(String[] args) throws JMSException {
  BasicConfigurator.configure();
  // Getting JMS connection from the server
  ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url);
  Connection connection = connectionFactory.createConnection(username,password);
   connection.start();
  Session session = connection.createSession(false,
    Session.AUTO_ACKNOWLEDGE);
  Destination destination = session.createTopic(topic);

  MessageConsumer consumer = session.createConsumer(destination);

    while (true)
    {
        //System.out.println("Waiting for message...");
        Message message = consumer.receive();
        if (message != null && message instanceof TextMessage) {
            TextMessage txtMsg = (TextMessage)message;
            System.out.println("Received: " + txtMsg.getText());
        }
    }
    //System.out.println("Closing connection");
    //consumer.close();
    //session.close();
    //connection.close();

}}

1 个答案:

答案 0 :(得分:0)

你可以轻松做到

Destination your-second-destination = session.createTopic("name-of-the-second-topic");
MessageConsumer consumer2 = session.createConsumer(your-second-destination);

然后让你的主类实现MessageListener接口,并将其设置为你的两个消费者的消息监听器(它总比忙碌等待更好)。

最后说明:您没有连接到TCP服务器,而是通过TCP连接到ActiveMQ代理。它可能看起来很挑剔,但用你的话语清楚可以避免混淆。