Skip to content

configuration(配置详解)

纳兰丶 edited this page Mar 2, 2018 · 6 revisions

TxManager配置详解

  • application.properties 主要是配置tmManager的http服务端口,redis信息,netty相关信息 注意:因为现在tmManager 是自己向自己注册,所以http端口(server.port)应该要与eureka的端口一致。

    server.port=8761   txManagerhttp端口
    tx.manager.netty.port=9998  对业务方提供的TCP 端口。
    tx.manager.netty.serialize=kryo  netty 序列化方式,注意应该要与业务方的序列化方式致。
  • bootstrap.yml 主要是配置eureka的相关属性,比如renew时间,注册地址等

  • 部署集群配置: 1.修改application.properties中的 server.port 如: 第一份服务为 server.port=8761 tx.manager.netty.port=9998; 第二份服务为:server.port=8762 tx.manager.netty.port=9999; 2. 修改bootstrap.yml中的eureka:client:serviceUrl:defaultZone:http://localhost:8761/eureka/,http://localhost:8762/eureka/ 再依次启动

业务方配置详解

 @TxTransaction  该注解为分布式事务的切面(AOP point),如果业务方的service服务需要参与分布式事务,则需要加上此注解
applicationContext.xml 详解:
   <!-- Aspect 切面配置,是否开启AOP切面-->
   <aop:aspectj-autoproxy expose-proxy="true"/>
   <!--扫描分布式事务的包-->
   <context:component-scan base-package="com.raincat.*"/>
   <!--启动类属性配置-->
   <bean id="txTransactionBootstrap" class="com.raincat.core.bootstrap.TxTransactionBootstrap">
       <property name="txManagerUrl" value="http://192.168.1.66:8761"/>
       <property name="serializer" value="kryo"/>
       <property name="nettySerializer" value="kryo"/>
       <property name="blockingQueueType" value="Linked"/>
       <property name="compensation" value="true"/>
       <property name="compensationCacheType" value="db"/>
       <property name="txDbConfig">
           <bean class="com.raincat.common.config.TxDbConfig">
               <property name="url"
                         value="jdbc:mysql://192.168.1.78:3306/order?useUnicode=true&amp;characterEncoding=utf8"/>
               <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
               <property name="password" value="password"/>
               <property name="username" value="xiaoyu"/>
           </bean>
       </property>
   </bean>
TxTransactionBootstrap 详解(具体参见com.raincat.core.config.TxConfig):
   <!--这里配置的TxManager http请求的IP:PORT (如果TxManager有改动,这里要跟着改动)-->
   <property name="txManagerUrl" value="http://192.168.1.66:8761"/>

   <!-- 与txManager通信的序列化方式,spi扩展支持 kroy,hessian protostuff 推荐使用kroy-->
   <property name="nettySerializer" value="kryo"/>

   <!--  线程池中的队列类型 spi扩展支持 Linked Array SynchronousQueue-->
   <property name="blockingQueueType" value="Linked"/>

   <!--线程池中的拒绝策略 spi扩展支持 Abort Blocking CallerRuns Discarded Rejected-->
   <property name="rejectPolicy" value="Abort"/>

   <!--开启本地补偿(默认开启)-->
   <property name="compensation" value="true"/>  
   <!--本地数据序列化方式  spi扩展支持 java kroy,hessian protostuff 推荐使用kroy-->
   <property name="serializer" value="kryo"/>
本地数据保存配置与详解(spi扩展支持db,redis,zookeeper,mongodb,file),详情配置请参照sample工程:
  1. 本地数据存储为数据库(数据库支持mysql,oracle ,sqlServer),当业务模块为集群时,推荐使用 会自动创建表,表名称为 tx_transaction_模块名称(applicationName),每个模块配置成一样的补偿方式,如果是用db进行存储,请使用同一个库来存储。
        <!--配置补偿类型为db-->
        <property name="compensationCacheType" value="db"/>
        <property name="txDbConfig">
            <bean class="com.raincat.common.config.TxDbConfig">
                <!--数据库url-->
                <property name="url"
                          value="jdbc:mysql://192.168.1.78:3306/order?useUnicode=true&amp;characterEncoding=utf8"/>
                <!--数据库驱动名称 -->          
                <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
                <property name="password" value="1234567"/>
                <property name="username" value="xiaoyu"/>
            </bean>
        </property>
  1. 本地数据存储为redis,当业务模块为集群时,推荐使用。(更多配置请参考 com.happylifeplat.transaction.core.config.TxRedisConfig)
     <!--配置补偿类型为reids-->
     <property name="compensationCacheType" value="redis"/>
     <property name="txRedisConfig">
        <bean class="com.raincat.common.config.TxRedisConfig">
          <!--redis host-->
          <property name="hostName"  value="192.168.1.78"/>
          <!--redis port-->
          <property name="port" value="6379"/>
          <!--redis 密码 (有密码就配置,无密码则不需要配置)-->
          <property name="password" value=""/>    
       </bean>
    </property>
  1. 本地数据存储为zookeeper,当业务模块为集群时,推荐使用
      <!--配置补偿类型为zookeeper-->
      <property name="compensationCacheType" value="zookeeper"/>
      <property name="txZookeeperConfig">
          <bean class="com.raincat.common.config.TxZookeeperConfig">
              <!--zookeeper host:port-->
              <property name="host"  value="192.168.1.66:2181"/>
              <!--zookeeper  session过期时间-->
              <property name="sessionTimeOut" value="2000"/>
              <!--zookeeper  根节点路径-->
              <property name="rootPath" value="/tx"/>
          </bean>
      </property>
  1. 本地数据存储为mongodb,当业务模块为单节点时,可以使用。会自动创建集合,集合名称为 tx_transaction_模块名称(applicationName) 这里mongdb连接方式采用3.4.0版本推荐使用的Sha1,不是CR模式,同时mongdb应该开启权限认证,使用者需要注意
        <!--配置补偿类型为mongodb-->
        <property name="compensationCacheType" value="mongodb"/>
         <property name="txMongoConfig">
            <bean class="com.raincat.common.config.TxMongoConfig">
                <!--mongodb url-->
                <property name="mongoDbUrl"  value="192.168.1.78:27017"/>
                <!--mongodb 数据库-->
                <property name="mongoDbName" value="happylife"/>
                <!--mongodb 用户名-->
                <property name="mongoUserName" value="xiaoyu"/>
                <!--mongodb 密码-->
                <property name="mongoUserPwd" value="123456"/>
            </bean>
        </property>
  1. 本地数据存储为file,当业务模块为单节点时,可以使用。创建的文件名称TX_ + prefix配置 + 模块名称
      <!--配置补偿类型为file-->
      <property name="compensationCacheType" value="file"/>
      <property name="txFileConfig">
             <bean class="com.raincat.common.config.TxFileConfig">
                 <!--指定文件路径(可填可不填,不填时候,默认就是当前项目所在的路径)-->
                 <property name="path"  value=""/>
                 <!--指定文件前缀,生成文件名称-->
                 <property name="prefix" value="consume"/>
             </bean>
       </property>