【问题标题】:Error connecting stand-alone Java program to JMS on WildFly server将独立 Java 程序连接到 WildFly 服务器上的 JMS 时出错
【发布时间】:2014-07-11 17:27:46
【问题描述】:

我在 WildFly 8.0.0.Final 上连接到 JMS 时遇到问题。

我正在使用一个独立的 Java 程序,它的源代码是 WildFly 快速入门示例中 HelloWorldJMSClient.java 的精确副本。

我已经关注了provided instructions,并添加了quickstartUser并配置了JMS

从管理控制台我可以看到 RemoteConnectionFactory

以及创建的测试队列

我以独立的完整配置启动 WildFly

服务器启动并似乎成功完成了所有步骤,包括 JMS (HornetQ) 绑定:

C:\WildFly8\wildfly-8.0.0.Final\bin\standalone.bat -c standalone-full.xml
Calling "C:\WildFly8\wildfly-8.0.0.Final\bin\standalone.conf.bat"
Setting JAVA property to "C:\Program Files\Java\jdk1.8.0_05\bin\java"
Detected server admin port: 9990
Detected server http port: 8080
===============================================================================

  JBoss Bootstrap Environment

  JBOSS_HOME: "C:\WildFly8\wildfly-8.0.0.Final"

  JAVA: "C:\Program Files\Java\jdk1.8.0_05\bin\java"

  JAVA_OPTS: "-XX:+UseCompressedOops -Dprogram.name=standalone.bat -Xms64M -Xmx512M -XX:MaxPermSize=256M -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman"

===============================================================================

10:39:36,154 INFO  [org.jboss.modules] (main) JBoss Modules version 1.3.0.Final
10:39:37,741 INFO  [org.jboss.msc] (main) JBoss MSC version 1.2.0.Final
10:39:37,842 INFO  [org.jboss.as] (MSC service thread 1-6) JBAS015899: WildFly 8.0.0.Final "WildFly" starting
10:39:42,278 INFO  [org.jboss.as.server] (Controller Boot Thread) JBAS015888: Creating http management service using socket-binding (management-http)
10:39:42,328 INFO  [org.xnio] (MSC service thread 1-5) XNIO version 3.2.0.Final
10:39:42,337 INFO  [org.xnio.nio] (MSC service thread 1-5) XNIO NIO Implementation Version 3.2.0.Final
10:39:42,400 INFO  [org.jboss.as.clustering.infinispan] (ServerService Thread Pool -- 36) JBAS010280: Activating Infinispan subsystem.
10:39:42,402 INFO  [org.jboss.as.naming] (ServerService Thread Pool -- 47) JBAS011800: Activating Naming Subsystem
10:39:42,396 INFO  [org.jboss.as.security] (ServerService Thread Pool -- 52) JBAS013171: Activating Security Subsystem
10:39:42,428 INFO  [org.jboss.as.jacorb] (ServerService Thread Pool -- 37) JBAS016300: Activating JacORB Subsystem
10:39:42,454 INFO  [org.jboss.as.webservices] (ServerService Thread Pool -- 56) JBAS015537: Activating WebServices Extension
10:39:42,523 INFO  [org.jboss.as.security] (MSC service thread 1-2) JBAS013170: Current PicketBox version=4.0.20.Final
10:39:42,577 INFO  [org.jboss.as.jsf] (ServerService Thread Pool -- 43) JBAS012615: Activated the following JSF Implementations: [main]
10:39:42,661 INFO  [org.jboss.as.naming] (MSC service thread 1-1) JBAS011802: Starting Naming Service
10:39:42,666 INFO  [org.jboss.as.mail.extension] (MSC service thread 1-1) JBAS015400: Bound mail session [java:jboss/mail/Default]
10:39:42,776 INFO  [org.wildfly.extension.undertow] (MSC service thread 1-1) JBAS017502: Undertow 1.0.0.Final starting
10:39:42,776 INFO  [org.wildfly.extension.undertow] (ServerService Thread Pool -- 55) JBAS017502: Undertow 1.0.0.Final starting
10:39:42,819 INFO  [org.jboss.as.connector.logging] (MSC service thread 1-1) JBAS010408: Starting JCA Subsystem (IronJacamar 1.1.3.Final)
10:39:43,053 INFO  [org.jboss.remoting] (MSC service thread 1-4) JBoss Remoting version 4.0.0.Final
10:39:43,319 INFO  [org.jboss.as.connector.subsystems.datasources] (ServerService Thread Pool -- 31) JBAS010403: Deploying JDBC-compliant driver class org.h2.Driver (version 1.3)
10:39:43,355 INFO  [org.jboss.as.connector.deployers.jdbc] (MSC service thread 1-6) JBAS010417: Started Driver service with driver-name = h2
10:39:43,646 INFO  [org.wildfly.extension.undertow] (ServerService Thread Pool -- 55) JBAS017527: Creating file handler for path C:\WildFly8\wildfly-8.0.0.Final/welcome-content
10:39:43,707 INFO  [org.wildfly.extension.undertow] (MSC service thread 1-8) JBAS017525: Started server default-server.
10:39:43,715 INFO  [org.wildfly.extension.undertow] (MSC service thread 1-8) JBAS017531: Host default-host starting
10:39:43,874 INFO  [org.wildfly.extension.undertow] (MSC service thread 1-5) JBAS017519: Undertow HTTP listener default listening on /127.0.0.1:8080
10:39:44,130 WARN  [org.jboss.as.messaging] (MSC service thread 1-4) JBAS011600: AIO wasn't located on this platform, it will fall back to using pure Java NIO. If your platform is Linux, install LibAIO to enable the AIO journal
10:39:44,377 INFO  [org.jboss.as.server.deployment.scanner] (MSC service thread 1-8) JBAS015012: Started FileSystemDeploymentService for directory C:\WildFly8\wildfly-8.0.0.Final\standalone\deployments
10:39:44,581 INFO  [org.hornetq.core.server] (ServerService Thread Pool -- 58) HQ221000: live server is starting with configuration HornetQ Configuration (clustered=false,backup=false,sharedStore=true,journalDirectory=C:\WildFly8\wildfly-8.0.0.Final\standalone\data\messagingjournal,bindingsDirectory=C:\WildFly8\wildfly-8.0.0.Final\standalone\data\messagingbindings,largeMessagesDirectory=C:\WildFly8\wildfly-8.0.0.Final\standalone\data\messaginglargemessages,pagingDirectory=C:\WildFly8\wildfly-8.0.0.Final\standalone\data\messagingpaging)
10:39:44,582 INFO  [org.hornetq.core.server] (ServerService Thread Pool -- 58) HQ221006: Waiting to obtain live lock
10:39:44,729 INFO  [org.hornetq.core.server] (ServerService Thread Pool -- 58) HQ221013: Using NIO Journal
10:39:44,748 WARN  [jacorb.codeset] (MSC service thread 1-2) Warning - unknown codeset (Cp1252) - defaulting to ISO-8859-1
10:39:45,033 INFO  [io.netty.util.internal.PlatformDependent] (ServerService Thread Pool -- 58) Your platform does not provide complete low-level API for accessing direct buffers reliably. Unless explicitly requested, heap buffer will always be preferred to avoid potential system unstability.
10:39:45,049 INFO  [org.jboss.as.jacorb] (MSC service thread 1-2) JBAS016330: CORBA ORB Service started
10:39:45,161 INFO  [org.hornetq.core.server] (ServerService Thread Pool -- 58) HQ221043: Adding protocol support CORE
10:39:45,286 INFO  [org.hornetq.core.server] (ServerService Thread Pool -- 58) HQ221043: Adding protocol support AMQP
10:39:45,299 INFO  [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-4) JBAS010400: Bound data source [java:jboss/datasources/ExampleDS]
10:39:45,305 INFO  [org.hornetq.core.server] (ServerService Thread Pool -- 58) HQ221043: Adding protocol support STOMP
10:39:45,391 INFO  [org.hornetq.core.server] (ServerService Thread Pool -- 58) HQ221034: Waiting to obtain live lock
10:39:45,392 INFO  [org.hornetq.core.server] (ServerService Thread Pool -- 58) HQ221035: Live Server Obtained live lock
10:39:45,472 INFO  [org.jboss.as.jacorb] (MSC service thread 1-3) JBAS016328: CORBA Naming Service started
10:39:45,890 INFO  [org.jboss.ws.common.management] (MSC service thread 1-5) JBWS022052: Starting JBoss Web Services - Stack CXF Server 4.2.3.Final
Connected to server
10:39:45,958 INFO  [org.jboss.messaging] (MSC service thread 1-4) JBAS011615: Registered HTTP upgrade for hornetq-remoting protocol handled by http-acceptor-throughput acceptor
10:39:45,961 INFO  [org.jboss.messaging] (MSC service thread 1-1) JBAS011615: Registered HTTP upgrade for hornetq-remoting protocol handled by http-acceptor acceptor
10:39:46,254 INFO  [org.hornetq.core.server] (ServerService Thread Pool -- 58) HQ221007: Server is now live
10:39:46,254 INFO  [org.hornetq.core.server] (ServerService Thread Pool -- 58) HQ221001: HornetQ Server version 2.4.1.Final (Fast Hornet, 124) [c42f74fe-ddcf-11e3-9d67-07b9140cdda2] 
10:39:46,272 INFO  [org.hornetq.core.server] (ServerService Thread Pool -- 58) HQ221003: trying to deploy queue jms.queue.testQueue
10:39:46,278 INFO  [org.jboss.as.messaging] (ServerService Thread Pool -- 58) JBAS011601: Bound messaging object to jndi name queue/test
10:39:46,279 INFO  [org.jboss.as.messaging] (ServerService Thread Pool -- 58) JBAS011601: Bound messaging object to jndi name java:jboss/exported/jms/queue/test
10:39:46,300 INFO  [org.jboss.as.messaging] (ServerService Thread Pool -- 60) JBAS011601: Bound messaging object to jndi name java:/ConnectionFactory
10:39:46,301 INFO  [org.jboss.as.messaging] (ServerService Thread Pool -- 59) JBAS011601: Bound messaging object to jndi name java:jboss/exported/jms/RemoteConnectionFactory
10:39:46,424 INFO  [org.jboss.as.connector.deployment] (MSC service thread 1-2) JBAS010406: Registered connection factory java:/JmsXA
10:39:46,515 INFO  [org.hornetq.ra] (MSC service thread 1-2) HornetQ resource adaptor started
10:39:46,516 INFO  [org.jboss.as.connector.services.resourceadapters.ResourceAdapterActivatorService$ResourceAdapterActivator] (MSC service thread 1-2) IJ020002: Deployed: file://RaActivatorhornetq-ra
10:39:46,518 INFO  [org.jboss.as.connector.deployment] (MSC service thread 1-2) JBAS010401: Bound JCA ConnectionFactory [java:/JmsXA]
10:39:46,518 INFO  [org.jboss.as.messaging] (MSC service thread 1-8) JBAS011601: Bound messaging object to jndi name java:jboss/DefaultJMSConnectionFactory
10:39:46,636 INFO  [org.jboss.as] (Controller Boot Thread) JBAS015961: Http management interface listening on http://127.0.0.1:9990/management
10:39:46,637 INFO  [org.jboss.as] (Controller Boot Thread) JBAS015951: Admin console listening on http://127.0.0.1:9990
10:39:46,637 INFO  [org.jboss.as] (Controller Boot Thread) JBAS015874: WildFly 8.0.0.Final "WildFly" started in 12523ms - Started 216 of 264 services (90 services are lazy, passive or on-demand)
10:40:35,457 INFO  [org.jboss.ejb.client] (XNIO-1 task-3) JBoss EJB Client version 2.0.0.Final

当我启动 Java 程序时,我收到以下错误:

May 22, 2014 10:57:29 AM org.xnio.Xnio <clinit>
INFO: XNIO version 3.2.0.Final
May 22, 2014 10:57:29 AM org.xnio.nio.NioXnio <clinit>
INFO: XNIO NIO Implementation Version 3.2.0.Final
May 22, 2014 10:57:30 AM org.jboss.remoting3.EndpointImpl <clinit>
INFO: JBoss Remoting version (unknown)
May 22, 2014 10:57:30 AM HelloWorldJMSClient main
INFO: Attempting to acquire connection factory "jms/RemoteConnectionFactory"
May 22, 2014 10:57:35 AM HelloWorldJMSClient main
SEVERE: Failed to connect to any server. Servers tried: [http-remoting://127.0.0.1:8080    
(Operation failed with status WAITING after 5000 MILLISECONDS)]

当我在调试器下运行它时,我可以看到程序获取initial JNDI context,然后在第一个lookup 上失败。

因此,在//127.0.0.1:8080 上期待服务器的程序似乎没有看到在这个 URL 上运行的服务器。

我尝试将 URL 更改为 //localhost:8080,但没有任何区别。

很可能我在某个地方有一个我根本没有注意到的愚蠢的错字。

无论如何,我该如何进一步解决这种情况?

澄清 (0523/14):

当我在浏览器中打开 localhost:8080 时,我会看到 WildFly 的欢迎页面。然后我可以进入管理面板。这就是前两个JNDI/JMS相关的屏幕截图是如何获得的。

来自netstat,服务器正在运行:

  TCP    127.0.0.1:8080         0.0.0.0:0              LISTENING

无论我是从命令行启动服务器还是从 IntellJ IDEA 启动,这个结果都是一样的。

网络流量

我相信这是一个相关的部分:

Link to a better view.

更新(2014 年 5 月 28 日)

正如在Wildfly's Forum 上向我指出的那样,日志中的以下行(我有点怀疑)应该提出了一个危险信号:

2014 年 5 月 22 日上午 10:57:30 org.jboss.remoting3.EndpointImpl
信息:JBoss Remoting 版本(未知

另外一点信息(不确定是否相关)我正在使用以下 jar 来手动解决依赖关系:

【问题讨论】:

  • 使用 netstat 检查是否有东西正在监听 localhost:8080。查看任何相关消息的 Wildfly 日志。检查端口是否打开。
  • @Iain - 当我在浏览器中打开 licalhost:8080 时,它会打开 WildFly 的欢迎页面,这是否足以证明服务器实际上在此端口上处于活动状态?
  • @PM77-1 是的。在你的 q 中提到这一点。
  • 您的防火墙可能仍会阻止您的客户端连接到它。应用程序防火墙有点挑剔。
  • 此时,我希望增加 Wildfly 服务器上的日志详细程度,以查看它在我通过浏览器连接时是否记录任何消息,然后在开发环境中执行相同操作,看看会发生什么区别是。

标签: java jboss jms hornetq wildfly


【解决方案1】:

同意@Iain。 netstat -nab 将列出所有端口及其所有者进程。如果 127.0.0.1:8080 或 0.0.0.0:8080 被列为 LISTENING,我可能会启动 Wireshark 并嗅探 8080 tcp 以确保您的 wildfly 进程实际上正在应答。听起来您正在寻找基本的 http 内容,wireshark 将主要为您解码。

不用说,这不应该在您的生产部署上/针对您的生产部署执行,除非绝对一切都已损坏并且需要现在修复。解决产品问题后,您需要查看测试和升级程序。

检查 tcp/http 连接设置诊断的事项:

  1. 服务器不只讨厌你的客户。使用备用机器和已知的工作客户端(或有点相似的客户端)连接到服务器。类似的客户端可以是浏览器或 netcat/telnet。如果这可行,则说明您的客户端已损坏,或者您的服务器专门拒绝了您的被测客户端。
  2. 服务器正在监听。获胜:netstat -nab,许多 *nix:netstat -nlp。为您的服务器进程查找 IP:Port LISTENING 行。可能有其他东西窃取了您的侦听端口,或者它处于 TIMEWAIT 中,因为您崩溃的服务器从未关闭它。
  3. 服务器正在接收传入的连接请求。在服务器端,windows:wireshark,nix:wireshark/tcpdump -i &lt;interface&gt; 'port &lt;listenport&gt;'。在您的侦听端口上查找来自客户端的传入 SYN 数据包和服务器回复。没有传入数据包意味着被网络配置或防火墙等阻止,这使其成为网络调试问题。没有传出数据包通常意味着服务器损坏或配置错误。
  4. 客户端收到服务器的响应。在确认服务器完成 tcp 连接但客户端没有 http 命令后,验证客户端机器使用大致相同的过程接收数据包。如果它没有收到服务器发送的数据包,这是一个网络调试问题。如果是,那么您的客户端已损坏。
  5. 服务器完成协议响应。客户端发送完整的请求,如“GET / HTTP/1.1\r\n\r\n”,服务器回复“HTTP/1.1 200 OK”。
    • 服务器可能会在您的客户端不期望它时回复一些握手二进制文件,例如,如果您在客户端上忘记了 SSL;这是一个很常见的错误。 SSL协议解码通常涉及转储客户端或服务器上的密钥并将它们复制到wireshark中——此时我通常启动gdb/jdb/dtrace并在进入ssl write之前和从ssl read返回之后转储字符串。这是有效的,因为连接已经建立并且可靠,所以除非它正在做有趣的事情并死掉,否则不要进行网络分析并开始常规调试过程。

当你被难住或花了一个小时没有进展时可以尝试的简单事情:

  1. 您阅读手册了吗?迟到总比没有好。
  2. 更改服务器监听端口。 10k-12k 范围内的东西不太可能与任何东西发生冲突。
  3. 尽可能减少客户端和服务器可调线程/进程以重现错误。如果错误消失,您将需要寻找一些东西。如果没有,当您在调试器中切换的线程上下文较少时,调试起来会容易得多。
  4. 有支持合同吗?询问供应商。描述你所做的诊断,通常会跳过那些有效的东西,直到一两次才失败,给他们一些背景信息。就像问 Stackexchange 问题一样,只有你付钱给他们。如果他们不提供及时的支持,请检查在相同价位是否有更好的选择,并重新评估您的业务需求;一款你无法使用的出色软件远不如现在运行的糟糕软件有用和有价值。

【讨论】:

  • 非常感谢您的详细解答。这根本不是刺激。一切都在我的开发笔记本电脑上。真正让我恼火的是,它适用于许多其他人,他们似乎遵循了相同的指示。 WildFlyJBoss Community Edition 的更名,它是免费的。
  • @PM77-1 我不是故意要叫你出来的,我看你的 q 就知道了。这不是刺激,但我通常在我的回答中作为 S.F. 的 SOP 有这样的免责声明。因为有些人……
  • Wiresharklocalhost 不友好。我下载了RawCap,现在我可以在WireShark 中看到它的结果。有没有更好的办法?输出相当大。我应该过滤掉 HTTP 流量吗?
  • 我发布了“对话”的一部分,似乎有“请求-响应”对。似乎有人尝试将协议升级到任何消息传递用途。
【解决方案2】:

将 Wildfly 管理控制台中的 JNDI 名称更改为:

jms/RemoteConnectionFactory(用于连接工厂) jms/queue/test(用于队列)

【讨论】:

    猜你喜欢
    • 2014-07-05
    • 2015-12-07
    • 2023-04-02
    • 2015-04-20
    • 2014-08-28
    • 1970-01-01
    • 1970-01-01
    • 2014-07-26
    • 2012-02-13
    相关资源
    最近更新 更多