@TxTransaction annotation详解

  • 该注解为分布式事务的切面(AOP point),如果业务方的service服务需要参与分布式事务,则需要加上此注解。

TxTransactionBootstrap 详解:

  1. <context:component-scan base-package="org.dromara.raincat.*"/>
  2. <aop:aspectj-autoproxy expose-proxy="true"/>
  3. <bean id="txTransactionBootstrap" class="org.dromara.raincat.core.bootstrap.TxTransactionBootstrap">
  4. <property name="txManagerUrl" value="http://localhost:8761"/>
  5. <property name="serializer" value="kryo"/>
  6. <property name="nettySerializer" value="kryo"/>
  7. <property name="bufferSize" value="4096"/>
  8. <property name="nettyThreadMax" value="16"/>
  9. <property name="refreshInterval" value="30"/>
  10. <property name="delayTime" value="30"/>
  11. <property name="heartTime" value="10"/>
  12. <property name="compensation" value="true"/>
  13. <property name="recoverDelayTime" value="60"/>
  14. <property name="retryMax" value="3"/>
  15. <property name="compensationRecoverTime" value="60"/>
  16. <property name="compensationCacheType" value="db"/>
  17. <property name="txDbConfig">
  18. <bean class="org.dromara.raincat.common.config.TxDbConfig">
  19. <property name="url"
  20. value="jdbc:mysql://192.168.1.98:3306/tx?useUnicode=true&amp;characterEncoding=utf8"/>
  21. <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
  22. <property name="username" value="root"/>
  23. <property name="password" value="123456"/>
  24. </bean>
  25. </property>
  26. </bean>
  • txManagerUrl:填写你启动的txManager的ip端口,注意添加http://前缀。

  • serializer :事务日志序列化方式,这里我推荐使用是kroy。当然也支持hessian,protostuff,jdk。在我们测试中表现为:kroy>hessian>protostuff>jdk。

  • nettySerializer: 与txManager通信对象的序列化方法,注意与txManager中的序列化方式配置一样。

  • bufferSize: disruptor的bufferSize,当高并发的时候,可以调大。注意是 2n次方。

  • nettyThreadMax : netty客户端工作线程数量。

  • refreshInterval: 拉取txmanager配置信息间隔时间,单位秒。

  • delayTime : 客户端与txmanager通信最大延迟时间。

  • heartTime : 与txmanager保持心跳时间间隔,单位秒。

  • compensation: 是否需要补偿,一般情况下不需要,极端情况下设置为true。

    • recoverDelayTime:事务恢复延迟时间,只有当 compensation:为ture才有用。

    • compensationRecoverTime: 补偿间隔时间 只有当 compensation:为ture才有用。

    • retryMax : 事务补偿最大重试次数。

  • compensationCacheType:使用何种方式存储日志,支持的有db,redis,mongo,zookeeper等。

  • 接下来是最重要的事务日志的存储 在我们的压测中,推荐使用mongo。表现为 mongodb>redis集群>mysql>zookeeper

  • 如果你采用mongodb存储日志,配置如下(url可以配置成mongdb集群的url)

  1. <property name="compensationCacheType" value="mongodb"/>
  2. <property name="txMongoConfig">
  3. <bean class="org.dromara.raincat.common.config.TxMongoConfig">
  4. <property name="mongoDbUrl" value="192.168.1.68:27017"/>
  5. <property name="mongoDbName" value="happylife"/>
  6. <property name="mongoUserName" value="xiaoyu"/>
  7. <property name="mongoUserPwd" value="123456"/>
  8. </bean>
  9. </property>
  • 如果你采用redis存储日志,配置如下:

    • redis单节点
  1. <property name="compensationCacheType" value="redis" />
  2. <property name="txRedisConfig">
  3. <bean class="org.dromara.raincat.common.config.TxRedisConfig">
  4. <property name="hostName"
  5. value="192.168.1.68"/>
  6. <property name="port" value="6379"/>
  7. <property name="password" value=""/>
  8. </bean>
  9. </property>
  • redis哨兵模式集群:
  1. <property name="compensationCacheType" value="redis"/>
  2. <property name="txRedisConfig">
  3. <bean class="org.dromara.hmily.common.config.TxRedisConfig">
  4. <property name="masterName" value="aaa"/>
  5. <property name="sentinel" value="true"/>
  6. <property name="sentinelUrl" value="192.168.1.91:26379;192.168.1.92:26379;192.168.1.93:26379"/>
  7. <property name="password" value="123456"/>
  8. </bean>
  9. </property>
  • redis集群:
  1. <property name="compensationCacheType" value="redis"/>
  2. <property name="txRedisConfig">
  3. <bean class="org.dromara.hmily.common.config.TxRedisConfig">
  4. <property name="cluster" value="true"/>
  5. <property name="clusterUrl" value="192.168.1.91:26379;192.168.1.92:26379;192.168.1.93:26379"/>
  6. <property name="password" value="123456"/>
  7. </bean>
  8. </property>
  • 如果你采用zookeeper存储日志,配置如下:
  1. <property name="compensationCacheType" value="zookeeper"/>
  2. <property name="txZookeeperConfig">
  3. <bean class="org.dromara.hmily.common.config.TxZookeeperConfig">
  4. <property name="host" value="192.168.1.73:2181"/>
  5. <property name="sessionTimeOut" value="100000"/>
  6. <property name="rootPath" value="/tcc"/>
  7. </bean>
  8. </property>