【问题标题】:Sending messages to a remote JMS Topic向远程 JMS 主题发送消息
【发布时间】:2009-06-24 01:47:35
【问题描述】:

我正在编写一个小型实用程序来将 JMS 消息发送到远程服务器,但我未能正确配置 InitialContext(或者看起来如此)

初始化上下文的代码:

      Properties p = new Properties();
      p.put(Context.INITIAL_CONTEXT_FACTORY, 
            "org.jnp.interfaces.NamingContextFactory");
      p.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
      p.put(Context.PROVIDER_URL, "jnp://10.10.10.10:1099/");
      Context context = new InitialContext(p);

但是当我运行它时,我得到一个异常:

javax.naming.CommunicationException 
[Root exception is java.rmi.ConnectException: 
Connection refused to host: 127.0.0.1; 
nested exception is: 
java.net.ConnectException: Connection refused: connect]

所以令我困惑的是,尽管我为 10.10.10.10 配置它,但它仍在抱怨 127.0.0.1 事件,它是活动的,运行 jboss,没有防火墙,我可以在端口 1099 上进行 telnet 会话,所以看起来没事的

任何指针?还是帮手?

【问题讨论】:

    标签: configuration jboss jms


    【解决方案1】:

    这是因为 JNDI 和相关协议本质上是回连的,后续请求将发送到服务器“认为”它应该监听的 IP。如果您 telnet 到 10.10.10.10:1099,然后查看输出,您会看到如下内容:

    telnet 10.10.10.10 1099
    [Connection message]
    [Garbage]
    127.0.0.1....
    

    原因是您的服务器正在 127.0.0.1 上“服务”,并将使用该地址作为 JNDI 位置进行回复。因为您(很可能)在远程机器上,所以当您的远程机器尝试连接到 Jboss 服务器通知它连接到的 IP(127.0.0.1)时,它会尝试连接到自己,而不是连接到 JBoss 服务器。

    您需要使用以下命令启动 jboss:./run.sh -b 0.0.0.0(所有 IP 绑定),或者将机器上的 localhost 条目更改为 10.10.10.10

    (顺便说一句,我记得为此苦苦挣扎了很久,并且知道这有多令人沮丧)

    【讨论】:

    • 这看起来很有希望:) 明天早上肯定会尝试并报告
    • 是的 - 我记得几年前花了几天时间。确凿的证据在 telnet 会话中 - 如果它最后显示 127.0.0.1,这就是您的远程客户端将尝试连接的 IP。您也可以使用它来检查您的修复 - 一旦它工作,正确的 IP 将在那里列出。
    • 工作就像一个魅力,我不得不为 -b 参数选择一个 ip,似乎不适用于多宿主机器。
    • 我在使用 Jboss 时遇到了同样的问题,我只是想知道是否有更好的用户友好的配置方式。我记得浪费了几天,因为我想第一次在远程机器上使用 Jboss。我在这样的小组中找到了答案。有人知道他们是否有此配置的帮助文档吗?
    猜你喜欢
    • 2015-12-03
    • 2017-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-28
    • 2012-03-24
    • 2018-10-21
    • 1970-01-01
    相关资源
    最近更新 更多