10

我不明白如何不在本地使用 ActiveMQ。
假设我有 2 台机器,它们需要交换一些消息。
在机器上我启动 ActiveMQ 代理:

> ~/bin/activemq

并使用类似的东西:

    javax.naming.Context ctx = new InitialContext();

    TopicConnectionFactory factory = (TopicConnectionFactory)ctx.lookup("connectionFactory");
    conn = factory.createTopicConnection();

    TopicSession session = conn.createTopicSession(false,TopicSession.AUTO_ACKNOWLEDGE);
    Topic topic = null;
    try{
        topic = (Topic)ctx.lookup("MyTopic");
        System.out.println("MyTopic was found");
    }catch(NameNotFoundException nnfe){
        topic = session.createTopic("MyTopic");
        System.out.println("MyTopic was created");
    }
    TextMessage textMessage = session.createTextMessage();
    TopicPublisher publisher = session.createPublisher(topic);
    conn.start();

    textMessage.setText("My topic message number");
    publisher.publish(textMessage);
    System.out.println("sendMessage2topic");

在 jndi.properties 我有:

java.naming.factory.initial = org.apache.activemq.jndi.ActiveMQInitialContextFactory
java.naming.provider.url = tcp://localhost:61616

但是我应该在另一台机器上创建什么来订阅这个主题?我应该在第二台机器上创建第二个本地 ActiveMQ 代理,以及如何订阅第一台机器上的远程主题???

4

3 回答 3

7

localhost:61616 将使 activeMQ 仅在 loopback(127.0.0.1) 接口上侦听。请改用机器的 IP 或 0.0.0.0。

于 2010-02-23T13:53:14.853 回答
6

这条线...

java.naming.provider.url = tcp://localhost:61616

...告诉您connectionFactory与环回接口连接。您可以在此处指定远程代理的地址。

在这种情况下,您的代码片段将向远程代理发送消息。现在由代理将消息分发给注册的订阅者(本地和远程订阅者)。

在这种情况下,没有创建代理(本地或远程)。您只需连接到现有的代理。当然,您也可以创建一个本地代理并将其配置为将消息路由到远程代理(例如,您可以通过静态/动态网络传输或对等网络传输协议来实现)。ActiveMQ 为您提供了许多集成拓扑和模式——但首先您必须定义您真正想要实现的目标。

于 2010-02-27T16:27:14.977 回答
1

你需要使用类似下面的东西。将 ipaddress 替换为您要使用的目标 ip

java.naming.provider.url = tcp://172.16.202.168:61616
于 2013-06-11T10:50:09.617 回答