2

jboss-esb.xml でいくつかのサービスを設定しています。サービスの 1 つにメッセージを送信すると、メッセージは設定されたサービスの 1 つによって受信されます (メッセージがそのサービス向けではない場合でも)!

同じメッセージを再度送信すると、別のサービスがそのメッセージを (ラウンドロビン方式で) 処理します。これはランダムではなく、各サービスが順番にメッセージを傍受するようになっています。

たとえば、3 つのサービスが構成されている場合。最初にメッセージを送信するとサービス 1 が受信し、2 回目にメッセージを送信するとサービス 2 が受信し、3 回目にメッセージを送信するとサービス 3 が受信します。4回目に送信すると、サービス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>
4

2 に答える 2

3

サービス間で同じjms-busを使用しているため、この問題が発生しています。サービスjmsリスナーごとに異なるjms-busを使用してみてください。

于 2011-01-11T22:15:07.433 に答える
0

マヌエルが言うことではない場合、あなたと同様の問題があり、メッセージが間違ったサービスに届いていました. 私たちの場合、リスナーをあるサービスから別のサービスに変更しても、juddi レジスターは変更されませんでした。そのため、同じキューをリッスンする 2 つのサービスで終了しました。

于 2012-03-14T15:02:22.827 に答える