2010-12-10 22 views
2

我有几个服务在jboss-esb.xml中配置,当我向其中一个服务发送消息时,我的消息将被配置的服务之一接收(即使消息并不意味着该服务)!JBoss ESB消息被错误的服务接收

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

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

回答

3

你是因为你使用相同的JMS-遇到问题巴士跨服务。尝试为每个服务jms侦听器使用不同的jms总线。

+0

但是,如果我的JMS配置为将消息发布到所有侦听的服务,那么所有消息都不会覆盖所有服务?在这种情况下,我是否需要配置不同的JMS? – Vishal 2013-06-06 09:13:42

0

如果不是曼努埃尔所说的话,我们遇到了类似的问题,消息越来越错误的服务。 在我们的例子中,当我们将一个监听器从一个服务改为另一个时,juddi寄存器没有被改变。所以我们结束了2个服务监听同一个队列。