两台HornetQ服务器之间的HornetQ JMS桥接器无法交付

两台HornetQ服务器之间的HornetQ JMS桥接器无法交付,jms,jboss6.x,hornetq,Jms,Jboss6.x,Hornetq,(11.11.11编辑,底部编辑) 我有两台JBoss AS 6.1服务器运行HornetQ(版本2.2.5 AS7)服务器。 让我们调用另一个客户机和另一个主机 客户端有一个队列(“sourceQueue”),由我们的web应用程序写入 在客户机和主服务器之间建立了JMS桥, 它在客户端上使用来自sourceQueue的消息,并应在客户端上生成这些消息 主机上的targetQueue。网桥正在客户端JBoss上运行 问题:不是从源代码消费消息,而是在目标代码上生成消息,表面上似乎什么都没有发生

(11.11.11编辑,底部编辑)

我有两台JBoss AS 6.1服务器运行HornetQ(版本2.2.5 AS7)服务器。 让我们调用另一个客户机和另一个主机

客户端有一个队列(“sourceQueue”),由我们的web应用程序写入

在客户机和主服务器之间建立了JMS桥, 它在客户端上使用来自sourceQueue的消息,并应在客户端上生成这些消息 主机上的targetQueue。网桥正在客户端JBoss上运行

问题:不是从源代码消费消息,而是在目标代码上生成消息,表面上似乎什么都没有发生:源代码有一条消息,目标代码没有。也有可能是源被一次又一次地提供该消息

使用netty连接器的网络连接正在工作,这已经过测试,重新启动网桥并观察netstat-n-c输出

什么样的问题会导致这种问题

  • 网络问题
  • 交易经理
  • 连接器错误
您将如何诊断HornetQ bridge的问题

下面是hornetq-jboss-beans.xml(在CLIENT/jboss/server/default/deploy/hornetq上)上的网桥定义。定义是JMS桥接器示例在以下方面的近似变体:


大黄蜂服务器
5000
10
一次,而且只有一次
1.
-1
真的
org.hornetq:service=MyJMSBridge
/X连接工厂
/集成/连接工厂
/jms/notificationRequestQueue
/集成/jms/notificationRequestQueue
java.naming.factory.initial
org.jnp.interfaces.NamingContextFactory
java.naming.provider.url
jnp://localhost:1099
java.naming.factory.url.pkgs
org.jboss.naming:org.jnp.interfaces“
jnp.timeout
5000
sotimeout
5000
java.naming.factory.initial
org.jnp.interfaces.NamingContextFactory
java.naming.provider.url
jnp://TARGET-URL.example.com:1099
java.naming.factory.url.pkgs
org.jboss.naming:org.jnp.interfaces“
jnp.timeout
5000
sotimeout
5000
客户端hornetq-jms.xml上的队列定义:

<configuration xmlns="urn:hornetq"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="urn:hornetq /schema/hornetq-jms.xsd">

   <connection-factory name="NettyConnectionFactory">
      <connectors>
         <connector-ref connector-name="netty"/>
      </connectors>
      <entries>
         <entry name="/ConnectionFactory"/>
         <entry name="/XAConnectionFactory"/>
      </entries>
      <xa>true</xa>
   </connection-factory>

   <queue name="DLQ">
      <entry name="/queue/DLQ"/>
   </queue>

   <queue name="ExpiryQueue">
      <entry name="/queue/ExpiryQueue"/>
   </queue>

   <queue name="notificationQueue">
      <entry name="/jms/notificationRequestQueue"/>
   </queue>
</configuration>
<configuration xmlns="urn:hornetq"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="urn:hornetq /schema/hornetq-jms.xsd">

   <connection-factory name="NettyConnectionFactory">
      <connectors>
         <connector-ref connector-name="netty"/>
      </connectors>
      <entries>
         <entry name="/ConnectionFactory"/>
         <entry name="/XAConnectionFactory"/>
      </entries>
      <xa>true</xa>
   </connection-factory>
   <connection-factory name="NettyRemoteConnectionFactory">
      <connectors>
         <connector-ref connector-name="netty-remote"/>
      </connectors>
      <entries>
         <entry name="/integration/XAConnectionFactory"/>
      </entries>
      <xa>true</xa>
   </connection-factory>

   <queue name="DLQ">
      <entry name="/queue/DLQ"/>
   </queue>

   <queue name="ExpiryQueue">
      <entry name="/queue/ExpiryQueue"/>
   </queue>

   <queue name="targetQueue">
      <entry name="/integration/jms/notificationRequestQueue"/>
   </queue>

    <topic name="unrelatedTopic">
        <entry name="/topic/cacheFlushNotification"/>
    </topic>
</configuration>

真的
在主机端hornetq-jms.xml:

<configuration xmlns="urn:hornetq"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="urn:hornetq /schema/hornetq-jms.xsd">

   <connection-factory name="NettyConnectionFactory">
      <connectors>
         <connector-ref connector-name="netty"/>
      </connectors>
      <entries>
         <entry name="/ConnectionFactory"/>
         <entry name="/XAConnectionFactory"/>
      </entries>
      <xa>true</xa>
   </connection-factory>

   <queue name="DLQ">
      <entry name="/queue/DLQ"/>
   </queue>

   <queue name="ExpiryQueue">
      <entry name="/queue/ExpiryQueue"/>
   </queue>

   <queue name="notificationQueue">
      <entry name="/jms/notificationRequestQueue"/>
   </queue>
</configuration>
<configuration xmlns="urn:hornetq"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="urn:hornetq /schema/hornetq-jms.xsd">

   <connection-factory name="NettyConnectionFactory">
      <connectors>
         <connector-ref connector-name="netty"/>
      </connectors>
      <entries>
         <entry name="/ConnectionFactory"/>
         <entry name="/XAConnectionFactory"/>
      </entries>
      <xa>true</xa>
   </connection-factory>
   <connection-factory name="NettyRemoteConnectionFactory">
      <connectors>
         <connector-ref connector-name="netty-remote"/>
      </connectors>
      <entries>
         <entry name="/integration/XAConnectionFactory"/>
      </entries>
      <xa>true</xa>
   </connection-factory>

   <queue name="DLQ">
      <entry name="/queue/DLQ"/>
   </queue>

   <queue name="ExpiryQueue">
      <entry name="/queue/ExpiryQueue"/>
   </queue>

   <queue name="targetQueue">
      <entry name="/integration/jms/notificationRequestQueue"/>
   </queue>

    <topic name="unrelatedTopic">
        <entry name="/topic/cacheFlushNotification"/>
    </topic>
</configuration>

真的
真的
编辑: 出于某种原因,如果在两台服务器完全部署后停止并重新启动网桥,网桥将开始传输消息。这是一个手动过程,我讨厌使用黑客定期重启网桥。我欢迎对这个问题提出任何建议


我还改进了启动顺序,使网桥依赖于它从中读取的队列-否则网桥会在队列之前启动,导致日志错误。

为什么不使用核心网桥?

查看此帖子:
它提供了一些关于如何公开核心队列并在核心网桥中使用它们的见解。

使用核心网桥需要使用核心队列,并且它们必须在网桥之前存在。我不知道如何将核心队列公开为JMS队列,HornetQ论坛上的响应似乎也不鼓励这种解决方案。如果你有一个解决方案,我会非常乐意使用一个核心网桥。这已经用JMS网桥解决了。后来我遇到了一个提示,似乎解决了这个问题。与命名约定有关:核心队列获得您给它们的确切名称。JMS队列的名称前面有“JMS.queue.”。为了对JMS访问的队列使用核心网桥,您需要通过名称“JMS.queue.QUEUENAME”来引用核心队列,而在JMS配置中,您需要引用“QUEUENAME”。这是尚未测试,但厕所