2010-12-10 11 views
2

Ich habe mehrere Dienste in jboss-esb.xml konfiguriert, wenn ich eine Nachricht an einen der Dienste sende, wird meine Nachricht von einem der konfigurierten Dienste empfangen (obwohl die Nachricht ist nicht für diesen Service gedacht)!JBoss ESB Nachricht wird vom falschen Dienst empfangen

Wenn ich die gleiche Nachricht noch einmal sende, wird ein anderer Dienst diese Nachricht verarbeiten (in Round-Robin-Manier), es ist nicht zufällig, es ist wie jeder Dienst abzufangen, um die Nachricht abzufangen.

Beispiel, wenn ich 3 Dienste konfiguriert habe. Das erste Mal, dass ich eine Nachricht sende, wird Dienst 1 es empfangen, das zweite Mal, dass ich eine Nachricht sende, wird Dienst 2 es empfangen, das dritte Mal, dass ich die Nachricht sende, wird Dienst 3 es empfangen. Das vierte Mal, dass ich es sende, wird Service 1 es erhalten und der Zyklus wiederholen.

Ich vermute, dass etwas mit der Art falsch ist, wie ich meine jboss-esb.xml konfiguriert habe, aber ich bin ahnungslos.

Hier ist, wie ich den Dienst aufrufen,

ServiceInvoker invoker = new ServiceInvoker("NTIAdaptor", "SearchAccountByParentInternalId"); 
Message replyMessage = invoker.deliverSync(requestMessage, TIMEOUT); 

Und hier ist der 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> 

Antwort

3

Sie erleben dieses Problem, weil Sie die gleiche jms- verwenden Bus über Dienstleistungen. Versuchen Sie, für jeden Service-JMS-Listener einen anderen JMS-Bus zu verwenden.

+0

Aber wenn mein JMS so konfiguriert ist, dass es die Nachrichten an alle Dienste, die es hören, veröffentlicht, würden dann alle Nachrichten nicht alle Dienste erreichen? Muss ich in diesem Fall auch andere JMS konfigurieren? – Vishal

0

Wenn nicht, was Manuel sagt, hatten wir ein ähnliches Problem mit Ihrem, Nachrichten wurden zu den falschen Diensten. In unserem Fall war es, dass das Juddi-Register nicht geändert wurde, wenn wir einen Listener von einem Dienst zu einem anderen änderten. Also hörten wir mit zwei Diensten auf, die dieselbe Warteschlange abhielten.