数据库出站失败时的HornetQ重试机制

时间:2014-02-14 18:11:59

标签: mule

我的用例如下:

我的Mule项目中有两个流程

流量1:     a)Http作为入站端点。它用于触发流程。     b)我有hornetq Jms配置,它将数据推送到Q.

流程2:     a)将HortnerQ配置作为入站的Jms,它消耗来自同一队列的消息。     b)在此之后我将数据库作为出站端点。在这里,我使用SQL服务器进行数据库操作。

当我的数据库出现故障或尝试将数据插入到非现有表时,重试机制应该应用于流。

完成以下更改: 我在我的JMS连接器上设置了maxRedelievery = 3。 在hornetq-configuration.xml文件中添加了3个。目前我正在使用hornetq2.0版本。

尝试了其他一些方法,例如使用beginorjoin保持JMS转换。在这之前没有运气。有人可以帮我解决这个问题。

以下是我的配置xml文件

                                                                                                                                                                                                                                                                  

<spring:beans>
    <spring:bean id="MSSQLDataSourceBean" name="MSSQLDataSourceBean" class="org.enhydra.jdbc.standard.StandardDataSource" >
        <spring:property name="driverName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
        <spring:property name="url" value="jdbc:sqlserver://VIKRAM-PC\MSSQLEXPRESS:1433;databaseName=testsqldb;user=sa;password=mssql;"/>
    </spring:bean>
</spring:beans>

<jms:connector name="jmsConnector" connectionFactory-ref="connectionFactory" specification="1.1" doc:name="JMS" maxRedelivery="3" validateConnections="true"/>

   <jdbc-ee:connector name="Database" dataSource-ref="MSSQLDataSourceBean" validateConnections="true" queryTimeout="-1" pollingFrequency="0" doc:name="Database">
    <reconnect frequency="5000" blocking="false" count="5"/>        
   </jdbc-ee:connector>



<flow name="hornetqsampleFlow2" doc:name="hornetqsampleFlow2">
    <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8081" path="testHornetQ" doc:name="HTTP"/>
    <set-payload value="test HornetQ" doc:name="Set Payload"/>
    <logger message="############# before jms ############ #[message.payload]" level="INFO" doc:name="Logger"/>
    <jms:outbound-endpoint queue="ExampleQueue" connector-ref="jmsConnector" doc:name="JMS" exchange-pattern="request-response"/>
    <logger message="$$$$$$$$$$$$$$ after JMS $$$$$$$$$$$$$$$$$4" level="INFO" doc:name="Logger"/>
</flow>



<flow name="hornetqsampleFlow1" doc:name="hornetqsampleFlow1">
    <jms:inbound-endpoint doc:name="JMS" connector-ref="jmsConnector" queue="ExampleQueue" exchange-pattern="request-response"/>
    <logger message="$$$$$$$ in jms consumption flow $$$$$$$$$$$$" level="INFO" doc:name="Logger"/>
    <jdbc-ee:outbound-endpoint exchange-pattern="request-response"  queryTimeout="-1" doc:name="Database" connector-ref="Database" queryKey="insertque">
        <jdbc-ee:query key="insertque" value="insert into tesdbone(colone,coltwo) values(123,'vikkione')"/>
    </jdbc-ee:outbound-endpoint>
    <!-- <file:outbound-endpoint path="C:\Users\SAN\Desktop" outputPattern="testhq.txt" responseTimeout="10000" doc:name="File"/> -->
</flow> 

此致 维克拉姆

1 个答案:

答案 0 :(得分:1)

要使用JMS真正地将入站HTTP流与出站JDBC流分离,请不要使用request-response JMS端点,而是使用one-way。此外,期待来自request-response频道的重新传播并没有多大意义。

然后在hornetqsampleFlow1中添加交易:

  • 仅使用JMS本地事务
  • 使用XA交易

jms:inbound-endpoint开始,加入jdbc-ee:outbound-endpoint