2010-12-10 3 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

Если это не то, что говорит Мануэль, у нас была схожая проблема с вашими, сообщения попадали в неправильные службы. В нашем случае это было то, что реестр судей не был изменен, когда мы сменили слушателя с одной службы на другую. Таким образом, мы закончили с двумя услугами, слушая одну и ту же очередь.

Смежные вопросы