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

标签 jboss jms esb jboss-messaging jboss-esb

我在 jboss-esb.xml 中配置了多个服务,当我向其中一项服务发送消息时,我的消息将由其中一项配置的服务接收(即使该消息不是针对该服务的)!

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

例如,如果我配置了 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>

最佳答案

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

关于JBoss ESB 消息被错误的服务接收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4405197/

相关文章:

logging - WSO2 ESB日志太大,如何设置?

java - Jboss过滤器无法捕获所有客户端的HTTP请求

apache - Jboss Mod_cluster

jms - websphere 8.5 自由配置文件不支持 wasJmsClient

java - JMS 2.0 中的速度测试

wso2 esb重新部署自定义中介

java - 通过副本 tcp 套接字发送 Java 对象

linux - Telnet 到 localhost 被拒绝,但是通过 IP 可以吗?

java - 具有常规数据库操作的多用户 Web 应用程序

java - DefaultMessageListenerContainer,有关要监听的队列的知识