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

Mule 数据库出站失败时的HornetQ重试机制,mule,Mule,我的用例如下所示: <spring:beans> <spring:bean id="MSSQLDataSourceBean" name="MSSQLDataSourceBean" class="org.enhydra.jdbc.standard.StandardDataSource" > <spring:property name="driverName" value="com.microsoft.sqlserver.jdbc.SQLServ

我的用例如下所示:

<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项目中有两个流

<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: a) Http作为入站端点。它仅用于触发流。 b) 我有HornetQJMS配置,它将数据推送到Q

<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> 
流程2: a) 具有HortnerQ配置的Jms作为入站,它使用来自同一队列的消息。 b) 在此之后,我将数据库作为出站端点。在这里,我使用SQLServer进行数据库操作

<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> 
当我的数据库发生故障或试图向不存在的表插入数据时,应在流上应用重试机制

<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> 
完成以下更改: 我已经在JMS连接器上设置了maxredelevery=3。 在hornetq-configuration.xml文件中添加了3。目前我使用的是hornetq2.0版本

<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> 
尝试了其他一些方法,例如使用beginorjoin保持JMS转换。在这之前没有运气。有人能帮我解决这个问题吗

<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> 
下面是我的配置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> 

<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> 

<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> 
问候
Vikram

要使用JMS将入站HTTP流与出站JDBC流真正解耦,请不要使用
请求-响应
JMS端点,而是使用
单向
。此外,期望从
请求-响应
通道重新交付也没有多大意义

<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> 
然后在hornetqsampleFlow1中添加事务,或者:

<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> 
  • 仅使用JMS本地事务
  • 使用XA事务

开始于
jms:inbound endpoint
并加入
jdbc ee:outbound endpoint

谢谢。进行了更改,但出现错误-“cvc复杂类型。2.4.a:发现以元素“jdbc ee:transaction”开头的无效内容”。感谢David的建议。在Jms入站上添加Jms事务并禁用JDBC出站上的JDBC事务后,重试尝试成功。我没有提到使用JDBC事务:)请接受我的回答。
<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>