【问题标题】:HornetQ retry mechanism when database outbound fails数据库出站失败时的HornetQ重试机制
【发布时间】:2014-02-16 00:08:06
【问题描述】:

我的用例如下:

我的 Mule 项目中有两个流程

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

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

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

完成以下更改: 我在我的 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> 

问候 维克拉姆

【问题讨论】:

    标签: mule


    【解决方案1】:

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

    然后在hornetqsampleFlow1 中添加交易,或者:

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

    jms:inbound-endpoint 开始并在jdbc-ee:outbound-endpoint 加入。

    【讨论】:

    • 谢谢。进行了更改,但出现错误 - “cvc-complex-type.2.4.a: 发现以元素 'jdbc-ee:transaction' 开头的无效内容”。
    • 感谢大卫的建议。在 JMS 入站上添加 Jms 事务并在 JDBC 出站上禁用 JDBC 事务后,重试尝试成功。
    • 我没有提到使用 JDBC 事务 :) 请接受我的回答。
    猜你喜欢
    • 2012-09-04
    • 1970-01-01
    • 1970-01-01
    • 2012-04-20
    • 2018-08-20
    • 1970-01-01
    • 2016-06-28
    • 2017-11-07
    • 1970-01-01
    相关资源
    最近更新 更多