JBoss ESB消息由错误的服务接收

时间:2010-12-10 02:40:40

标签: jboss jms esb jboss-messaging jboss-esb

我在jboss-esb.xml中配置了几个服务,当我向其中一个服务发送消息时,我的消息将被其中一个配置的服务接收(即使该消息不适用于该服务)! / p>

如果我再次发送相同的消息,另一个服务将处理该消息(以循环方式),它不是随机的,就像每个服务轮流截取消息一样。

示例,如果我配置了3个服务。我第一次发送消息,服务1将收到它,第二次我发送消息,服务2将收到它,第三次我发送消息,服务3将收到它。我第四次发送它,服务1将收到它并重复循环..

我怀疑我配置jboss-esb.xml的方式有问题,但我一无所知。

以下是我调用服务的方式,

ServiceInvoker invoker = new ServiceInvoker("NTIAdaptor", "SearchAccountByParentInternalId");
Message replyMessage = invoker.deliverSync(requestMessage, TIMEOUT);

这是jboss-esb.xml,

<?xml version="1.0"?>
<jbossesb parameterReloadSecs="5"
 xmlns="http://anonsvn.labs.jboss.com/labs/jbossesb/trunk/product/etc/schemas/xml/jbossesb-1.0.1.xsd"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://anonsvn.labs.jboss.com/labs/jbossesb/trunk/product/etc/schemas/xml/jbossesb-1.0.1.xsd http://anonsvn.jboss.org/repos/labs/labs/jbossesb/trunk/product/etc/schemas/xml/jbossesb-1.0.1.xsd">
 <providers>
  <jms-provider connection-factory="ConnectionFactory" name="JMS Provider">
   <jms-bus busid="NTI">
    <jms-message-filter dest-name="queue/NTIAdaptor" dest-type="QUEUE"/>
   </jms-bus>
  </jms-provider>
 </providers>
 <services>  
  <service category="NTIAdaptor"
   description="SearchAccountByExternalId" name="SearchAccountByExternalId">
   <listeners>
    <jms-listener busidref="NTI" name="JMS"/>
   </listeners>
   <actions mep="RequestResponse" webservice="true">
    <action class="com.krona.esb.action.AuthenticateAction" name="authenticate"/>
    <action class="com.krona.esb.action.LogAction" name="logStart"/>
    <action
     class="com.krona.esb.account.action.SearchAccountByExternalIdAction"
     name="process" process="process"/>
    <action class="com.krona.esb.action.LogAction" name="logEnd"/>
   </actions>
  </service>
  <service category="NTIAdaptor"
   description="SearchAccountByInternalId" name="SearchAccountByInternalId">
   <listeners>
    <jms-listener busidref="NTI" name="JMS"/>
   </listeners>
   <actions mep="RequestResponse" webservice="true">
    <action class="com.krona.esb.action.AuthenticateAction" name="authenticate"/>
    <action class="com.krona.esb.action.LogAction" name="logStart"/>
    <action
     class="com.krona.esb.account.action.SearchAccountByInternalIdAction"
     name="process" process="process"/>
    <action class="com.krona.esb.action.LogAction" name="logEnd"/>
   </actions>
  </service>
  <service category="NTIAdaptor"
   description="SearchAccountByParentInternalId" name="SearchAccountByParentInternalId">
   <listeners>
    <jms-listener busidref="NTI" name="JMS"/>
   </listeners>
   <actions mep="RequestResponse" webservice="true">
    <action class="com.krona.esb.action.AuthenticateAction" name="authenticate"/>
    <action class="com.krona.esb.action.LogAction" name="logStart"/>
    <action
     class="com.krona.esb.account.action.SearchAccountByParentInternalIdAction"
     name="process" process="process"/>
    <action class="com.krona.esb.action.LogAction" name="logEnd"/>
   </actions>
  </service>
  <service category="NTIAdaptor"
   description="SearchAccountByServiceExternalId" name="SearchAccountByServiceExternalId">
   <listeners>
    <jms-listener busidref="NTI" name="JMS"/>
   </listeners>
   <actions mep="RequestResponse" webservice="true">
    <action class="com.krona.esb.action.AuthenticateAction" name="authenticate"/>
    <action class="com.krona.esb.action.LogAction" name="logStart"/>
    <action
     class="com.krona.esb.account.action.SearchAccountByServiceExternalIdAction"
     name="process" process="process"/>
    <action class="com.krona.esb.action.LogAction" name="logEnd"/>
   </actions>
  </service>
 </services>
</jbossesb>

2 个答案:

答案 0 :(得分:3)

您遇到了这个问题,因为您在服务中使用相同的jms-bus。尝试为每个服务jms监听器使用不同的jms-bus。

答案 1 :(得分:0)

如果不是Manuel所说的,我们遇到了类似的问题,消息传递给错误的服务。 在我们的例子中,当我们将一个听众从一个服务改为另一个服务时,就没有改变juddi寄存器。所以我们以2个服务结束了同一个队列。