博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Camel In Action 读书笔记 (9)
阅读量:6270 次
发布时间:2019-06-22

本文共 2256 字,大约阅读时间需要 7 分钟。

hot3.png

第9章谈了事务在Camel中的应用。

第一节讲了一堆废话,为什么要用事务。在最后提到了一点jms在应用的时候consumer默认采取的是 auto-acknowledge mode(自动应答模式)即只要consumer接收了这个消息,jms服务器就认为消息已处理完成,无论consumer是否处理成功。当然jms还有另一种模式 transacted acknowledge mode(事务确认模式)。

第二节Transaction basics(事务基础),Camel本身不提供事务,Camel支持事务是依赖Spring的事务管理。后面是事务管理的一个例子,当然也就是上面说的transacted acknowledge mode。

配置事务管理器、jms服务器,如下:

<bean id="activemq"

      class="org.apache.activemq.camel.component.ActiveMQComponent">
    <property name="transacted" value="true"/>          
    <property name="transactionManager" ref="txManager"/>
</bean>
<bean id="txManager"         
      class="org.springframework.jms.connection.JmsTransactionManager">
    <property name="connectionFactory" ref="jmsConnectionFactory"/>  
</bean>
<bean id="jmsConnectionFactory"
      class="org.apache.activemq.ActiveMQConnectionFactory">
    <property name="brokerURL" value="tcp://localhost:61616"/>
</bean>

注意上面标红的,jms服务器的事务开关要打开,同时注入spring的事务管理器。

定义路由如下:

<camelContext id="camel" xmlns=">

    <route id="partnerToDB">
        <from uri="activemq:queue:partners"/>
        <transacted/>
        <bean ref="partner" method="toSql"/>
        <to uri="jdbc:myDataSource"/>
    </route>
</camelContext>

路由中也要将事务开关打开。

前两节介绍了事务的基础,第三节又进入了老话题,EIP。在这里提出了一种新的模式:The Transactional Client EIP,带事务的客户端模式:描述了一个客户端在处理消息的过程中是如何控制事务的。如下图:

 

带事务的客户端会挂起senssion直到确认这个消息处理完成。当Receiver开启事务时,消息在事务提交之前是不会发送或者删除的。当Sender开启事务时,消息在事务提交之前对consomer来说是不可用的。

下面讲两种具体的情况:

local transactions(单一资源管理)

 

 

如上图:事务管理器JmsTransactionManager只对jmsbroker进行管理,不对DB进行管理。

global transactions(多资源管理)

如上图:我们需要在一个事务中管理多个资源,JMS和JDBC都进行事务管理。在这种情况下我们事务管理器需要替换为JtaTransactionManager。

实例可详见:

第4节主要讲了事务传播特性的配置,通过定义bean的形式,如下。

<bean id="required"                                               

      class="org.apache.camel.spring.spi.SpringTransactionPolicy">
    <property name="transactionManager" ref="txManager"/> 
    <property name="propagationBehaviorName"
              value="PROPAGATION_REQUIRED"/>
</bean>
<camelContext id="camel" xmlns="
>
    <route id="partnerToDB">
        <from uri="activemq:queue:partners"/>
        <transacted ref="required"/>                   
        <bean ref="partner" method="toSql"/>
        <to uri="jdbc:myDataSource"/>
    </route>
</camelContext>

在这节还讲了在多条路由中的事务控制情况,具体详见9.4.2.

第5节介绍了在事务管理中争对不支持事务的资源如何处理。实现 方式是在UnitOfWork中注册回调接口Synchronization

这个接口提供了两个方法:

void onComplete(Exchange exchange);

void onFailure(Exchange exchange);

具体情况不再说明 。

 

Camel In Action 完结。。。。。

转载于:https://my.oschina.net/u/574870/blog/140064

你可能感兴趣的文章
Codeforces Round #271 (Div. 2) D. Flowers (递推 预处理)
查看>>
jacky自问自答-java并发编程
查看>>
Struts2+JSON数据
查看>>
zTree实现单独选中根节点中第一个节点
查看>>
Cocos2D-x设计模式发掘之中的一个:单例模式
查看>>
很强大的HTML+CSS+JS面试题(附带答案)
查看>>
用树莓派实现RGB LED的颜色控制——C语言版本号
查看>>
VC2012编译CEF3-转
查看>>
java 自己定义异常,记录日志简单说明!留着以后真接复制
查看>>
Android 使用AIDL实现进程间的通信
查看>>
机器学习(Machine Learning)&深度学习(Deep Learning)资料
查看>>
jquery的图片轮播 模板类型
查看>>
C# 获取文件名及扩展名
查看>>
Web安全学习计划
查看>>
输出有序数组的连续序列范围
查看>>
zinnia项目功能分析
查看>>
windows cmd for paramiko
查看>>
SQL经典面试题集锦
查看>>
View学习(一)-DecorView,measureSpec与LayoutParams
查看>>
色彩力量!21款你应该知道的优秀品牌设计
查看>>