我的用例如下:
我的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>
此致 维克拉姆
答案 0 :(得分:1)
要使用JMS真正地将入站HTTP流与出站JDBC流分离,请不要使用request-response
JMS端点,而是使用one-way
。此外,期待来自request-response
频道的重新传播并没有多大意义。
然后在hornetqsampleFlow1
中添加交易:
在jms:inbound-endpoint
开始,加入jdbc-ee:outbound-endpoint
。