如何在本地使用activemq?

rau*_*uch 10 java activemq-classic jms

我无法理解如何在本地使用ActiveMQ.
假设我有2台机器,需要交换一些消息.
在机器上我启动ActiveMQ代理:

> ~/bin/activemq
Run Code Online (Sandbox Code Playgroud)

并使用类似的东西:

    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");
Run Code Online (Sandbox Code Playgroud)

我在jndi.properties中的位置:

java.naming.factory.initial = org.apache.activemq.jndi.ActiveMQInitialContextFactory
java.naming.provider.url = tcp://localhost:61616
Run Code Online (Sandbox Code Playgroud)

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

Eli*_*ter 7

localhost:61616只会使activeMQ侦听环回(127.0.0.1)接口.使用机器的IP或0.0.0.0代替.


Hen*_*sek 6

这条线......

java.naming.provider.url = tcp://localhost:61616
Run Code Online (Sandbox Code Playgroud)

...告诉你connectionFactory连接loopback接口.您可以在此处指定远程代理的地址.

在这种情况下,您的代码段将向远程代理发送消息.现在,经纪人需要通过已注册的订户(本地和远程订户)分发消息.

在这种情况下,不会创建任何代理(本地或远程).您只需连接到现有代理.当然,您也可以创建本地代理并将其配置为将消息路由到远程代理(例如,您可以通过静态/动态网络传输或对等网络传输协议来执行此操作).ActiveMQ为您提供了许多集成拓扑和模式 - 但首先您必须定义实际要实现的内容.