2010-12-10 5 views
2

J'ai plusieurs services configurés dans jboss-esb.xml, quand j'envoie un message à l'un des services, mon message sera reçu par l'un des services configurés (même si le message n'est pas destiné à ce service)! Si j'envoie le même message à nouveau, un autre service traitera ce message (en round-robin maner), ce n'est pas aléatoire, c'est comme si chaque service prenait le relais pour intercepter le message.JBoss ESB Message reçu par le mauvais service

Exemple, si j'ai 3 services configurés. La première fois que j'envoie un message, le service 1 le recevra, la deuxième fois j'enverrai un message, le service 2 le recevra, la troisième fois j'enverrai le message, le service 3 le recevra. La quatrième fois que je l'envoie, Service 1 le recevra et le cycle se répètera.

Je suppose qu'il y a quelque chose qui ne va pas dans la façon dont j'ai configuré mon fichier jboss-esb.xml, mais je suis complètement désemparé.

Voici comment j'appeler le service,

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

Et voici le 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> 

Répondre

3

Vous rencontrez ce problème parce que vous utilisez le même jms- bus à travers les services. Essayez d'utiliser un bus jms différent pour chaque écouteur de service jms.

+0

Mais si mon JMS est configuré de telle manière qu'il publie les messages à tous les services qui l'écoutent, alors tous les msgs atteindraient-ils pas tous les services? Ai-je besoin de configurer différents JMS dans un tel cas également? – Vishal

0

Si ce n'est pas ce que Manuel dit, nous avons eu un problème similaire à la vôtre, les messages étaient de mauvais service. Dans notre cas, le registre juddi n'a pas été modifié lorsque nous avons changé un auditeur d'un service à un autre. Nous nous sommes donc retrouvés avec 2 services écoutant la même file d'attente.

Questions connexes