JBoss ESB Сообщение получено не той службой - PullRequest
2 голосов
/ 10 декабря 2010

У меня есть несколько служб, настроенных в 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>

Ответы [ 2 ]

3 голосов
/ 12 января 2011

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

0 голосов
/ 14 марта 2012

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

...