Как можно использовать activemq не локально? - PullRequest
10 голосов
/ 23 февраля 2010

Я не могу понять, как использовать 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 на 2-й машине и как подписаться на удаленную тему, которая находится на первой машине ???

Ответы [ 3 ]

7 голосов
/ 23 февраля 2010

localhost: 61616 заставит activeMQ прослушивать только интерфейс обратной связи (127.0.0.1). Вместо этого используйте IP-адрес устройства или 0.0.0.0.

6 голосов
/ 27 февраля 2010

Эта строка ...

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

... говорит вашему connectionFactory подключиться через интерфейс обратной связи. Здесь вы можете указать адрес удаленного брокера.

В этом случае ваш фрагмент отправит сообщение удаленному брокеру. Теперь брокер должен распространить сообщение по зарегистрированным подписчикам (как локальным, так и удаленным).

В этом сценарии брокер не создается (ни локально, ни удаленно). Вы просто подключаетесь к существующему брокеру. Конечно, вы также можете создать локального посредника и настроить его для маршрутизации сообщений на удаленный (например, вы можете сделать это с помощью статического / динамического сетевого транспорта или протокола одноранговой сети). ActiveMQ предоставляет вам множество топологий и шаблонов интеграции - но сначала вы должны определить, чего на самом деле вы хотите достичь.

1 голос
/ 11 июня 2013

Вам нужно использовать что-то вроде ниже. замените ipaddress на целевой ip, который вы хотите использовать

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