使用 HornetQ (JBoss) 在 docker 容器上公开的 JMS 所需的端口

2024-04-29

我正在使用 Docker 将 JMS 服务器容器链接到另一个 JMS 客户端容器。但是当我在docker容器中运行服务器时,客户端无法正确连接到服务器。我在docker上暴露了端口443(JMS还有其他使用的端口吗?)

我可以成功创建目标,但不能创建 JMS 上下文:

String PROVIDER_URL = "https-remoting://MYDOMAIN:443";
...

/** PASSED **/
Destination destination = (Destination) namingContext.lookup(destinationString);

/** HAS ERROR **/
JMSContext context = connectionFactory.createContext(username, password)

这是错误:

java.nio.channels.UnresolvedAddressException
    at sun.nio.ch.Net.checkAddress(Net.java:123)
    at sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:621)
    at io.netty.channel.socket.nio.NioSocketChannel.doConnect(NioSocketChannel.java:176)
    at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.connect(AbstractNioChannel.java:169)
    at io.netty.channel.DefaultChannelPipeline$HeadHandler.connect(DefaultChannelPipeline.java:1008)
    at io.netty.channel.DefaultChannelHandlerContext.invokeConnect(DefaultChannelHandlerContext.java:495)
    at io.netty.channel.DefaultChannelHandlerContext.connect(DefaultChannelHandlerContext.java:480)
    at io.netty.channel.ChannelOutboundHandlerAdapter.connect(ChannelOutboundHandlerAdapter.java:47)
    at io.netty.channel.CombinedChannelDuplexHandler.connect(CombinedChannelDuplexHandler.java:168)
    at io.netty.channel.DefaultChannelHandlerContext.invokeConnect(DefaultChannelHandlerContext.java:495)
    at io.netty.channel.DefaultChannelHandlerContext.connect(DefaultChannelHandlerContext.java:480)
    at io.netty.channel.ChannelDuplexHandler.connect(ChannelDuplexHandler.java:50)
    at io.netty.channel.DefaultChannelHandlerContext.invokeConnect(DefaultChannelHandlerContext.java:495)
    at io.netty.channel.DefaultChannelHandlerContext.connect(DefaultChannelHandlerContext.java:480)
    at io.netty.channel.DefaultChannelHandlerContext.connect(DefaultChannelHandlerContext.java:465)
    at io.netty.channel.DefaultChannelPipeline.connect(DefaultChannelPipeline.java:847)
    at io.netty.channel.AbstractChannel.connect(AbstractChannel.java:199)
    at io.netty.bootstrap.Bootstrap$2.run(Bootstrap.java:165)
    at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:354)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:353)
    at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:101)
    at java.lang.Thread.run(Thread.java:745)

Exception in thread "main" javax.jms.JMSRuntimeException: Failed to create session factory
    at org.hornetq.jms.client.JmsExceptionUtils.convertToRuntimeException(JmsExceptionUtils.java:98)
    at org.hornetq.jms.client.HornetQConnectionFactory.createContext(HornetQConnectionFactory.java:149)
    at org.hornetq.jms.client.HornetQConnectionFactory.createContext(HornetQConnectionFactory.java:130)
    at com.wpic.uptime.Client.main(Client.java:100)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
Caused by: javax.jms.JMSException: Failed to create session factory
    at org.hornetq.jms.client.HornetQConnectionFactory.createConnectionInternal(HornetQConnectionFactory.java:673)
    at org.hornetq.jms.client.HornetQConnectionFactory.createContext(HornetQConnectionFactory.java:140)
    ... 7 more
Caused by: HornetQNotConnectedException[errorType=NOT_CONNECTED message=HQ119007: Cannot connect to server(s). Tried with all available servers.]
    at org.hornetq.core.client.impl.ServerLocatorImpl.createSessionFactory(ServerLocatorImpl.java:905)
    at org.hornetq.jms.client.HornetQConnectionFactory.createConnectionInternal(HornetQConnectionFactory.java:669)
    ... 8 more

我刚刚找到了这个问题的解决方案。我也在经历它。

在您的情况下,问题出在 JBoss 配置中。就我而言,问题出在 Wildfly 8.2 中。

您可能在 JBoss 中使用以下参数: jboss.bind.地址 = 0.0.0.0

我在我的 Wildfly 中使用这个参数,让他接受来自任何 IP 的外部连接,因为我的 Wildfly 暴露在互联网上。

问题是,如果您没有指定 JBoss/Wildfly 设置,HornetQ 应向正在执行远程查找的 JMS 客户端报告哪个 IP,HornetQ 将假定该 IP 是 jboss.bind.address 中设置的 IP。在这种情况下,将认为 0.0.0.0 不是有效的 IP。您可能会在 JBoss 日志中看到以下消息:

信息 [org.hornetq.jms.server](ServerService 线程池 - 53) HQ121005:“http-connector”检测到无效的“主机”值“0.0.0.0” 连接器。切换到“主机名.your.server”。如果这个新地址是 不正确,请手动配置连接器以使用正确的 一。

在这种情况下,HornetQ 将使用机器名称中定义的主机。例如,在 Linux 上,它将使用 /etc/hostname 中定义的内容。

还有一个问题。因为通常主机名不是互联网上的有效主机,可以通过 DNS 服务解析为 IP。

然后注意您可能发生的情况:您的 JBoss 服务器计划绑定到 0.0.0.0,您的 HornetQ(嵌入在 JBoss 中)正在尝试获取此 IP,但它不是一个有效的 IP,他正在获取您的主机名服务器。当您的远程 JMS 客户端(位于本地网络之外)在您的 JBoss 上进行查找时,HornetQ 会向客户端报告他必须在主机 YOUR_HOSTNAME_LOCAL_SERVER 上寻找 HornetQ 资源,但是当它尝试通过 DNS 解析此名称时,他不能然后出现如下故障:

java.nio.channels.UnresolvedAddressException 在 sun.nio.ch.Net.checkAddress(Net.java:123) 在sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:621) 在 io.netty.channel.socket.nio.NioSocketChannel.doConnect(NioSocketChannel.java:176) 在 io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.connect(AbstractNioChannel.java:169) 在 io.netty.channel.DefaultChannelPipeline$HeadHandler.connect(DefaultChannelPipeline.java:1008) 在 io.netty.channel.DefaultChannelHandlerContext.invokeConnect(DefaultChannelHandlerContext.java:495) 在io.netty.channel.DefaultChannelHandlerContext.connect(DefaultChannelHandlerContext.java:480) 在 io.netty.channel.ChannelOutboundHandlerAdapter.connect(ChannelOutboundHandlerAdapter.java:47) 在 io.netty.channel.CombinedChannelDuplexHandler.connect(CombinedChannelDuplexHandler.java:168) 在 io.netty.channel.DefaultChannelHandlerContext.invokeConnect(DefaultChannelHandlerContext.java:495) 在io.netty.channel.DefaultChannelHandlerContext.connect(DefaultChannelHandlerContext.java:480) 在 io.netty.channel.ChannelDuplexHandler.connect(ChannelDuplexHandler.java:50) 在 io.netty.channel.DefaultChannelHandlerContext.invokeConnect(DefaultChannelHandlerContext.java:495) 在io.netty.channel.DefaultChannelHandlerContext.connect(DefaultChannelHandlerContext.java:480) 在 io.netty.channel.DefaultChannelHandlerContext.connect(DefaultChannelHandlerContext.java:465) 在 io.netty.channel.DefaultChannelPipeline.connect(DefaultChannelPipeline.java:847) 在io.netty.channel.AbstractChannel.connect(AbstractChannel.java:199) 在 io.netty.bootstrap.Bootstrap$2.run(Bootstrap.java:165) 在io.netty.util.concurrent.SingleThreadEventExecutor.runAllTask​​s(SingleThreadEventExecutor.java:354) 在io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:353) 在io.netty.util.concurrent.SingleThreadEventExecutor $2.run(SingleThreadEventExecutor.java:101) 在 java.lang.Thread.run(Thread.java:745)

问题的解决方案是配置 JBoss,它应该向进行远程查找的客户通知哪个主机。

就我而言,野蝇的设置如下。必须更改standalone.xml 文件:

<subsystem xmlns="urn:jboss:domain:messaging:2.0">    
   <hornetq-server>
      <security-enabled>true</security-enabled>
      <journal-file-size>102400</journal-file-size>

      <connectors>
         <http-connector name="http-connector" socket-binding="http-remote-jms">
            <param key="http-upgrade-endpoint" value="http-acceptor"/>
         </http-connector>
      </connectors>
                ...    
   </hornetq-server> 
</subsystem>

AND

<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
...
   <outbound-socket-binding name="http-remote-jms">  
      <remote-destination host="YOUR_REAL_HOSTNAME" port="${jboss.http.port:8080}"/>  
   </outbound-socket-binding>   
</socket-binding-group>

请注意,我没有使用 https,因为我无法在 JMS 中使用 https 进行 Wildfly 工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 HornetQ (JBoss) 在 docker 容器上公开的 JMS 所需的端口 的相关文章

随机推荐

  • 如何在文件中的行和列位置插入文本?

    我想在文件中特定行的特定列插入字符串 而不读取和重写整个文件 假设我有一个文件file txt How was the English test How was the Math test How was the Chemistry tes
  • 使用 CSS“display:inline”时换行

    我已经成功获得了 p 跟随一个 p
  • 正则表达式-如何删除“和”之间的逗号?

    如何删除 双引号 和 双引号 之间的 逗号 就像有 a b c d d e f 然后从这里开始 在 和 之间有一个逗号应该被删除 删除该逗号后它应该是 a b c dd e f 在 C 中的正则表达式的帮助下 EDIT 我忘记指定引号之间可
  • SceneKitpresentScene(_withTransition:incomingPointOfViewcompletionHandler) 与动态加载的 SCNScene 崩溃

    我试图从一个场景过渡到另一个场景 但是当我打电话时presentScene有车祸 场景不存储在类中或引用 它们直接加载到presentScene call Screenshot of crash in Xcode 我的简单的最小项目在这里
  • 如何使用 POI 读取和编辑巨大的 Excel 文件?

    我需要执行以下操作 1 复制一个巨大的1400 1400的excel文件 并制作一份副本 2 读取复制的文件并添加新的列和行 同时进行编辑 3 这将是一个独立的程序 而不是在服务器上 我有内存占用低和性能快的限制 我读了一些书并发现了以下内
  • 这是创建一个聪明的宏来自动对 C 中的某些内容进行基准测试的方法吗?

    我想知道是否可以创建一个聪明的宏来自动在 C 中运行 进程 并仅使用 C 假设我有一个像这样的小结构 typedef struct pbench char description 256 int nbenchs double times P
  • XML 到字符串列表

    我有一些代码需要放入 C 中的字符串列表中 我正在从 XML 文件中读取这些代码 它的布局如下所示
  • 使用动态 SQL 检索表结构

    我正在迁移数据库 并尝试将表结构信息检索到单个行项目中以进行机器处理 由于技术原因 现有的迁移工具无法使用 必须采用这种方式处理 我已在多个表上成功运行以下查询 SELECT LISTAGG column name data type da
  • 设置最大 CUDA 资源

    我想知道是否可以设置 CUDA 应用程序的最大 GPU 资源 例如 如果我有一个 4GB GPU 但希望给定的应用程序只能访问 2GB 如果它尝试分配更多 就会失败 理想情况下 这可以在进程级别或 CUDA 上下文级别上设置 不 目前没有允
  • Facebook 从应用程序选项卡获取用户 ID

    Facebook 应用程序可以有一个选项卡 用户可以根据需要将其添加到其个人资料的选项卡中 我如何获取 uid 或以其他方式识别当前登录的用户以便为他自定义布局 谢谢 如前所述here http developers facebook co
  • 使用 Loggly 时在 log4net 中指定应用程序名称

    我正在测试几个 ASP NET Web 应用程序 并使用 Log4net 的附加程序通过 Loggly 设置它们 现在 日志记录似乎没问题 但我似乎找不到一种方法 使用 log4 loggly 附加程序 来指定应用程序名称 以便当我在 Lo
  • 如何列出运行时函数的所有调用?

    有什么办法可以list 在VS中显示 写入文件 所有来电者 对象 函数 一个函数的当程序运行时 可能使用调试器 我需要record 所有通话 包括来电者 一个函数的从计划启动到终止 简单扫描源代码或二进制文件不做这份工作因为该程序可以作为服
  • 如何用VB.net生成pdf文件?

    我想生成一个非常简单的报告 其中包含一些图像和文本 我想知道是否有一种方法可以使用 vb net 生成 pdf 文件 您可以使用 Visual Studio 附带的 Crystal Reports 对象导出到 PDF 文件
  • Java 切片数组与 Python 中一样

    我有一个 Java 字节数组 需要获取其中的一部分 我想以与使用 Python 列表相同的方式使用 Java 数组 即使用切片 Java中有类似的东西吗 先感谢您 您可以使用数组 https docs oracle com en java
  • Tkinter:为按钮和标签制作“类”

    因此 我在 tkinter 框架中几乎有许多不同的按钮和标签 并且我都希望它们具有相似的属性 假设我希望它们全部具有红色前景色 并具有透明背景 我什至可以这样做吗 这个透明背景仅适用于按钮 我可不可以有一个class对于按钮 我认为这是在
  • match_none 有什么用?

    我浏览了docs https www elastic co guide en elasticsearch reference current query dsl match all query html query dsl match no
  • UML三元关联实现java代码[重复]

    这个问题在这里已经有答案了 三元关联是结构关系 指定一个事物的对象连接到其他两个事物的对象 我理解这种关系 但我不知道如何实现显示这三个类之间关联的方法 让我们考虑下面的例子 项目有许多使用特定编程的开发人员 语言促进发展 开发人员使用特定
  • 使用酶测试反应确认窗口

    我在 React 中有一个按钮 当用户单击它时 它会打开一个简单的确认窗口 在我添加confirm方法之前 下面的测试是绿色的 添加后确认它是红色的 我需要如何更改测试才能与附加确认一起使用 反应删除按钮 const DeleteButto
  • Django 的 TEMPLATE_DEBUG 设置有什么用?

    我一直在尝试查找有关此设置的信息 但信息不多 有人可以解释一下这个设置是什么吗 我应该在生产中关闭它吗 只是想了解它 也许我错过了 django 中的一些重要内容 我使用django 1 6 此设置有助于调试渲染模板时引发的错误 异常 如果
  • 使用 HornetQ (JBoss) 在 docker 容器上公开的 JMS 所需的端口

    我正在使用 Docker 将 JMS 服务器容器链接到另一个 JMS 客户端容器 但是当我在docker容器中运行服务器时 客户端无法正确连接到服务器 我在docker上暴露了端口443 JMS还有其他使用的端口吗 我可以成功创建目标 但不