【问题标题】:How can one use activemq not locally?一个人怎么能不在本地使用activemq?
【发布时间】:2011-01-20 01:54:07
【问题描述】:

我不明白如何不在本地使用 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 代理,以及如何订阅第一台机器上的远程主题???

【问题讨论】:

    标签: java jms activemq


    【解决方案1】:

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

    【讨论】:

    • 好的,在机器上我将使用第一台机器的IP,但是问题和以前一样:在第二台机器上我应该使用什么?
    • @rauch:我的意思是在 ActiveMQ Broker 配置文件中,在 transportConnector 元素中使用 tcp。 transportConnector 的 URI 属性应该使用 IP 而不是 localhost
    • 不错!!完全忘记了“0.0.0.0”。这样就可以在服务器上使用localhost,也可以用服务器的IP对外连接!
    • 非常感谢。 0.0.0.0 为我工作。这是一个比添加系统 IP 更好的解决方案
    【解决方案2】:

    这一行...

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

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

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

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

    【讨论】:

    • 那不是JNDI连接的URL吗?连接代理的 URL 不会嵌入到 ConnectionFactory 对象中吗?
    【解决方案3】:

    您需要使用如下所示的内容。将 ipaddress 替换为您要使用的目标 ip

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-26
      • 1970-01-01
      • 1970-01-01
      • 2011-08-21
      • 2022-12-18
      • 2011-05-06
      • 1970-01-01
      相关资源
      最近更新 更多