2014-05-11 83 views
0

發送消息從WebService類我有一個騾子流量: - 我有以下流程: -如何在ActiveMQ的隊列騾子

<context:property-placeholder location="classpath:conf/DBConnectionProp.properties"/> 
<spring:beans> 
<spring:bean id="DB_Source" name="DB_Source" class="org.enhydra.jdbc.standard.StandardDataSource"> 
<spring:property name="url" value="${url}"/> 
<spring:property name="driverName" value="${driverName}"/> 
</spring:bean> 
<spring:bean id="LookUp" name="LookUp" class="com.vertu.services.schema.maindata.v1.Dao.MainDataDAOImpl"> 
<spring:property name="dataSource" ref="DB_Source"/> 
</spring:bean> 

<spring:bean id="objectStore" class="org.mule.util.store.SimpleMemoryObjectStore"/> 
</spring:beans> 


<jdbc-ee:connector name="Database_Global" dataSource-ref="DB_Source" validateConnections="true" queryTimeout="-1" pollingFrequency="0" doc:name="Database"> 
<reconnect frequency="1000" count="3" /> 
<jdbc-ee:query key="InsertQuery" value="INSERT INTO getData(ID,NAME,AGE,DESIGNATION)VALUES(?,?,?,?)"/> 
<jdbc-ee:query key="RetriveQuery" value="Select * from getData where ID=?"/> 
<jdbc-ee:query key="CheckRowExistsQuery" value="Select count(*) from getData where ID=?"/> 
<jdbc-ee:query key="UpdateQuery" value="UPDATE getData SET NAME=?, AGE=?, DESIGNATION = ? WHERE ID=?"/> 
<jdbc-ee:query key="DeleteQuery" value="DELETE FROM getData WHERE ID=?"/> 
</jdbc-ee:connector> 

<jms:activemq-connector name="Active_MQ" brokerURL="tcp://localhost:61616" validateConnections="true" doc:name="Active MQ"/> 

<flow name="db_exceptionsFlow" doc:name="db_exceptionsFlow" > 
<http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8082" path="mainData" doc:name="HTTP"/> 
<cxf:jaxws-service serviceClass="com.test.services.schema.maindata.v1.MainData" doc:name="SOAP"/> 

<until-successful objectStore-ref="objectStore" maxRetries="5" secondsBetweenRetries="10" doc:name="Until Successful"> 
<component class="com.test.services.schema.maindata.v1.Impl.MainDataImpl" doc:name="JavaMain_ServiceImpl"/> 
</until-successful> 

<mulexml:object-to-xml-transformer doc:name="Object to XML"/> 
<logger message="Response :- #[message.payload]" level="INFO" doc:name="Logger"/> 

<catch-exception-strategy doc:name="Catch Exception Strategy"> 
<jms:outbound-endpoint queue="errorQueue" connector-ref="Active_MQ" doc:name="JMS"/> 
</catch-exception-strategy> 
</flow> 

<!-- <flow name="db_retryFlow" doc:name="db_retryFlow" > 
<jms:inbound-endpoint connector-ref="Active_MQ" address="jms://tcp:errorQueue" doc:name="JMS" exchange-pattern="request-response"/> 

<logger level="INFO" message="message :-#[message.payload]" doc:name="Logger"/> 
</flow> --> 
</mule> 

但現在的問題是: -

這是創建errorQueue,但在DB服務器不可用時, 隊列中沒有消息消息。

由於它是一個Web服務,我把實現類(com.test.services.schema.maindata.v1.Impl .MainDataImpl)它負責數據庫操作下,直到成功爲止

還有一個問題是櫃面成功的(當DB端點可用)它沒有顯示在SOAPUI任何迴應

請幫助...讓我能在ActiveMQ中,每當DB把消息端點不可用,並且每當DB端點再次可用時都可以從ActiveMQ檢索消息,並使用該消息進行數據庫交互...。

+0

可能的重複[如何在數據庫端點不可用時從Mule在ActiveMQ中存儲消息](http://stackoverflow.com/questions/23578200/how-to-store-message-in-activemq-from-mule-當數據庫端點不可用) –

+0

我已經刪除了前一個...現在我需要一個解決方案在這裏 –

回答

1

until-successful路由器是一個異步路由器,即它將立即執行且異常發生在它內部不會傳播到它之外。

要解決您的問題,請在其上配置一個deadLetterQueue端點,以便將失敗的消息發送至errorQueue

閱讀用戶指南中詳細瞭解until-successfulhttp://www.mulesoft.org/documentation/display/current/Until+Successful+Scope

+0

嗨大衛,我修改了代碼通過引入deadLetterQueue-ref =「errorQueue」,直到成功擁有全局端點引用: - ...它運行成功但仍然沒有消息去errorQueue ...請幫助 –

+0

你不想將這些發送到JMS隊列嗎?像''? –

+0

嗨大衛...我已經添加了一個全球性的JMS端點: - ...但仍然沒有運氣...仍然沒有消息在排隊...... –

0

所以,按照大衛的建議,最終的解決方案是之前在catch異常塊JMS出站把object to string transformer現在的消息是在隊列中,併爲我工作