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

如果不是曼努埃爾所說的話,我們遇到了類似的問題,消息越來越錯誤的服務。 在我們的例子中,當我們將一個監聽器從一個服務改爲另一個時,juddi寄存器沒有被改變。所以我們結束了2個服務監聽同一個隊列。