-
-
Notifications
You must be signed in to change notification settings - Fork 109
User Guide 0.4.x
- JDK版本:7.0及以上版本;
- 禁止对Feign/Ribbon/RestTemplate等HTTP请求自行进行封装,但允许拦截;
- 禁止使用Spring Cloud的IRule,如有类似需求,可考虑扩展ByteJTA的TransactionRule接口;
- 必须且仅可指定一个<dubbo:application name="..." />元素,其name不能为空,且必须唯一;
- 必须且仅可指定一个<dubbo:protocol port="..." />元素,其port不能为空,也不能为-1;本约束与ByteJTA采用的负载均衡分发粒度相关,当使用ByteJTA按请求粒度负载均衡时可忽略该约束;
- 定义dubbo服务提供者时(<dubbo:service />):a、filter必须为transaction;b、loadbalance必须为transaction;c 、cluster必须为failfast;d、retries必须为0;e、group必须为org.bytesoft.bytejta;
- 定义dubbo服务消费者时(<dubbo:reference />):a、filter必须为transaction;b、loadbalance必须为transaction;c 、cluster必须为failfast;d、retries必须为0;e、group必须为org.bytesoft.bytejta;
@ImportResource({ "classpath:bytejta-supports-springcloud.xml" })
<import resource="classpath:bytejta-supports-dubbo.xml" />
@SpringBootApplication(scanBasePackages = "com.yourcompany.service...")
<context:component-scan base-package="com.yourcompany.service..." />
@Bean(name = "dataSource")
public DataSource getDataSource(@Autowired XADataSource xaDataSource, @Autowired TransactionManager transactionManager) {
BasicManagedDataSource bds = new BasicManagedDataSource();
bds.setXaDataSourceInstance(xaDataSource);
bds.setTransactionManager(transactionManager);
bds.setMaxTotal(50);
bds.setInitialSize(20);
bds.setMaxWaitMillis(60000);
bds.setMinIdle(6);
bds.setLogAbandoned(true);
bds.setRemoveAbandonedOnBorrow(true);
bds.setRemoveAbandonedOnMaintenance(true);
bds.setRemoveAbandonedTimeout(1800);
bds.setTestWhileIdle(true);
bds.setTestOnBorrow(false);
bds.setTestOnReturn(false);
bds.setValidationQuery("select 'x' ");
bds.setValidationQueryTimeout(1);
bds.setTimeBetweenEvictionRunsMillis(30000);
bds.setNumTestsPerEvictionRun(20);
return bds;
}
@Bean
public XADataSource wrapDataSource() {
MysqlXADataSource xaDataSource = new MysqlXADataSource();
xaDataSource.setUrl("jdbc:mysql://127.0.0.1:3306/inst01");
xaDataSource.setUser("root");
xaDataSource.setPassword("123456");
XADataSourceImpl wrapDataSource = new XADataSourceImpl();
wrapDataSource.setXaDataSource(xaDataSource);
return wrapDataSource;
}
<bean id="dontUseThisDataSourceDirectly_1" class="com.mysql.jdbc.jdbc2.optional.MysqlXADataSource">
<property name="url" value="jdbc:mysql://127.0.0.1:3306/inst01" />
<property name="user" value="root" />
<property name="password" value="123456" />
</bean>
<bean id="dontUseThisDataSourceDirectly_2" class="org.bytesoft.bytejta.supports.jdbc.XADataSourceImpl">
<property name="xaDataSource" ref="dontUseThisDataSourceDirectly_1" />
</bean>
<bean id="dataSource" class="org.apache.commons.dbcp.managed.BasicManagedDataSource">
<property name="transactionManager" ref="transactionManager" />
<property name="xaDataSourceInstance" ref="dontUseThisDataSourceDirectly_2" />
<!-- ...... -->
</bean>
注意:不要直接使用本例中定义的dontUseThisDataSourceDirectly_1和dontUseThisDataSourceDirectly_2这两个数据源,而应该使用dataSource数据源。
ByteJTA计划对负载均衡的支持粒度,可分为两种:a、按事务进行负载均衡;b、按请求进行负载均衡。
在某个事务T内,consumer端应用app1首次向provider端应用app2(集群环境)发起请求时,ByteJTA使用random负载均衡策略将其随机分发到一个app2实例(如inst2);后续app1在该事务T内再次向app2发起请求时,将始终落在inst2(即首次请求的处理实例)上。
注意
1)ByteJTA 0.4.x版本默认支持“按事务进行负载均衡”的特性。
consumer端应用app1向provider端应用app2(集群环境)发起请求时,ByteJTA始终按业务系统指定的负载均衡策略将请求分发到一个app2实例。
注意
1)ByteJTA 0.4.x版本暂不提供“按请求进行负载均衡”的特性,如果您希望使用该特性,请联系[email protected]。
当服务提供方应用使用了Context Path时,服务消费方需要在配置中体现,如:
org:
bytesoft:
bytejta:
contextpath:
springcloud-sample-provider: /sample-provider
上述配置将告知ByteJTA,应用springcloud-sample-provider使用的context-path为/sample-provider。
ByteJTA默认通过org.bytesoft.bytejta.supports.springcloud.rule.TransactionRuleImpl来提供路由决策。如果业务系统希望对Rule进行扩展,可以考虑通过org.bytesoft.bytejta.NFTransactionRuleClassName配置向ByteJTA注册自己的Rule实现。例如,
org:
bytesoft:
bytejta:
NFTransactionRuleClassName: xxx.RuleImpl
注意:xxx.RuleImpl需要实现org.bytesoft.bytejta.supports.springcloud.rule.TransactionRule接口。
If you've found byteJTA useful, and would like to support future development of byteJTA, please consider donating. Any amount is appreciated.
WeiXin
Alipay