我在我的应用 jms 和数据库中使用了2种资源。我已经配置如下,我正在按照下面的顺序进行一个简单的测试来检查系统中断。
以下是完整的代码:https://github.com/ameyjadiye/mq-fury
这样我只想确保当远程监听器在db中检查数据时,数据始终存在于db中。
我在系统上运行1k消息并且现在一切正常,是否有可能检查失败?我没有明确管理数据库事务,我还需要在这里做更多的设置吗?
<bean id = "messageListenerContainer2" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="connectionFactory"/>
<property name="destinationName" value="real_queue"/>
<property name="messageListener" ref="jmsMessageListener2"/>
<property name="cacheLevel" value="1"/>
<property name="concurrency" value="5-5" />
<property name="sessionTransacted" value="true"/>
<property name="transactionManager" ref="jmsTransactionManager"/>
</bean>
<bean id="jmsTransactionManager" class="org.springframework.jms.connection.JmsTransactionManager">
<property name="connectionFactory" ref="connectionFactory" />
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<constructor-arg ref="dataSource"/>
</bean>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://192.168.0.102:3306/test" />
<property name="username" value="root" />
<property name="password" value="r00T" />
</bean>
这是一个独立的应用程序在春天,尝试使用 ChainedTrnsactionManager ,但它使系统运行缓慢
答案 0 :(得分:1)
您的配置看起来不像支持两阶段提交事务。当使用Spring作为2PC的事务管理器时,您需要使用JtaTransactionManager,它将在内部使用JTA容器(所有符合EE的服务器)提供的实际JTA事务管理器,或者使用{{3}等独立事务管理器。 }或Bitrionix。有关示例示例,请查看Atomikos。