2014-05-11 82 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现在的消息是在队列中,并为我工作