Skip to content

Commit 138b581

Browse files
committed
Merge branch 'dev' into tx-lcn-foxdd
# Conflicts: # pom.xml # transaction-dubbo/pom.xml # transaction-dubbo/src/main/java/com/codingapi/tx/dubbo/service/impl/TimeOutServiceImpl.java # transaction-motan/pom.xml # transaction-springcloud/pom.xml # tx-client/pom.xml # tx-client/src/main/java/com/codingapi/tx/aop/bean/TxTransactionLocal.java # tx-client/src/main/java/com/codingapi/tx/aop/service/impl/AspectBeforeServiceImpl.java # tx-client/src/main/java/com/codingapi/tx/aop/service/impl/TxRunningTransactionServerImpl.java # tx-client/src/main/java/com/codingapi/tx/aop/service/impl/TxStartTransactionServerImpl.java # tx-client/src/main/java/com/codingapi/tx/datasource/AbstractResourceProxy.java # tx-client/src/main/java/com/codingapi/tx/netty/service/MQTxManagerService.java # tx-client/src/main/java/com/codingapi/tx/netty/service/impl/MQTxManagerServiceImpl.java # tx-manager/pom.xml # tx-manager/src/main/java/com/codingapi/tm/compensate/service/impl/CompensateServiceImpl.java # tx-manager/src/main/java/com/codingapi/tm/config/ConfigReader.java # tx-manager/src/main/java/com/codingapi/tm/manager/service/TxManagerService.java # tx-manager/src/main/java/com/codingapi/tm/manager/service/impl/TxManagerServiceImpl.java # tx-manager/src/main/resources/static/index.html # tx-plugins-db/pom.xml # tx-plugins-db/src/main/java/com/codingapi/tx/datasource/relational/LCNDBConnection.java # tx-plugins-nodb/pom.xml # tx-plugins-redis/pom.xml
2 parents c054851 + 90dc020 commit 138b581

63 files changed

Lines changed: 1690 additions & 334 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,6 @@ tx-plugins-redis 是LCN 对于redis模块的插件支持(功能暂未实现)
112112

113113
[dubbo版本](https://github.com/codingapi/dubbo-lcn-demo)
114114

115-
[motan版本](https://github.com/zfvipgit/motan-lcn-demo.git)
115+
[motan版本](https://gitee.com/zfvipCase/motan-lcn-demo)
116116

117117
技术交流群:554855843

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
<groupId>com.codingapi</groupId>
77
<artifactId>tx-lcn</artifactId>
8-
<version>4.0.2</version>
8+
<version>4.0.3</version>
99
<packaging>pom</packaging>
1010

1111
<name>tx-lcn</name>

transaction-dubbo/pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
<groupId>com.codingapi</groupId>
99
<artifactId>transaction-dubbo</artifactId>
10-
<version>4.0.2</version>
10+
<version>4.0.3</version>
1111

1212
<name>transaction-dubbo</name>
1313
<url>https://github.com/codingapi/tx-lcn</url>
@@ -68,7 +68,7 @@
6868
<dependency>
6969
<groupId>com.codingapi</groupId>
7070
<artifactId>tx-client</artifactId>
71-
<version>4.0.2</version>
71+
<version>4.0.3</version>
7272
</dependency>
7373

7474
<dependency>
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.codingapi.tx.dubbo.balance;
2+
3+
import com.alibaba.dubbo.common.URL;
4+
import com.alibaba.dubbo.rpc.Invocation;
5+
import com.alibaba.dubbo.rpc.Invoker;
6+
import com.alibaba.dubbo.rpc.cluster.loadbalance.ConsistentHashLoadBalance;
7+
8+
import java.util.List;
9+
10+
/**
11+
* create by lorne on 2017/11/29
12+
*/
13+
public class ConsistentHashLoadBalanceProxy extends ConsistentHashLoadBalance {
14+
15+
16+
private LCNBalanceProxy lcnBalanceProxy = new LCNBalanceProxy();
17+
18+
@Override
19+
public <T> Invoker<T> select(List<Invoker<T>> invokers, URL url, Invocation invocation) {
20+
return lcnBalanceProxy.proxy(invokers,super.select(invokers, url, invocation));
21+
}
22+
}
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
package com.codingapi.tx.dubbo.balance;
2+
3+
import com.alibaba.dubbo.rpc.Invoker;
4+
import com.alibaba.dubbo.rpc.RpcException;
5+
import com.codingapi.tx.aop.bean.TxTransactionLocal;
6+
import com.lorne.core.framework.utils.encode.MD5Util;
7+
import org.apache.commons.lang.StringUtils;
8+
import org.slf4j.Logger;
9+
import org.slf4j.LoggerFactory;
10+
11+
import java.util.List;
12+
13+
/**
14+
* create by lorne on 2017/11/29
15+
*/
16+
17+
public class LCNBalanceProxy {
18+
19+
private Logger logger = LoggerFactory.getLogger(LCNBalanceProxy.class);
20+
21+
public <T> Invoker<T> proxy(List<Invoker<T>> invokers,Invoker<T> invoker) throws RpcException {
22+
TxTransactionLocal txTransactionLocal = TxTransactionLocal.current();
23+
if(txTransactionLocal==null){
24+
return invoker;
25+
}
26+
27+
try {
28+
logger.info("LCNBalanceProxy - > start");
29+
30+
String groupId = txTransactionLocal.getGroupId();
31+
32+
String uniqueKey = invoker.getUrl().getServiceInterface();
33+
34+
logger.info("LCNBalanceProxy - > uniqueKey - >" + uniqueKey);
35+
36+
String key = MD5Util.md5((groupId + "_" + uniqueKey).getBytes());
37+
38+
//请求tm获取模块信息
39+
Invoker old = getInvoker(txTransactionLocal, invokers, key);
40+
41+
if (old != null) {
42+
logger.info("LCNBalanceProxy - > load old invoker ");
43+
44+
return old;
45+
}
46+
putInvoker(key, txTransactionLocal, invoker);
47+
48+
logger.info("LCNBalanceProxy - > load new invoker ");
49+
50+
return invoker;
51+
}finally {
52+
logger.info("LCNBalanceProxy - > end");
53+
}
54+
}
55+
56+
57+
private void putInvoker(String key,TxTransactionLocal txTransactionLocal,Invoker invoker){
58+
String serviceName = invoker.getUrl().getServiceInterface();
59+
String address = invoker.getUrl().getAddress();
60+
61+
String md5 = MD5Util.md5((address+serviceName).getBytes());
62+
63+
logger.info("putInvoker->address->"+address+",md5-->"+md5);
64+
65+
txTransactionLocal.putLoadBalance(key,md5);
66+
}
67+
68+
69+
private <T> Invoker<T> getInvoker(TxTransactionLocal txTransactionLocal,List<Invoker<T>> invokers,String key){
70+
String val = txTransactionLocal.getLoadBalance(key);
71+
if(StringUtils.isEmpty(val)){
72+
return null;
73+
}
74+
for(Invoker<T> invoker:invokers){
75+
String serviceName = invoker.getUrl().getServiceInterface();
76+
String address = invoker.getUrl().getAddress();
77+
78+
String md5 = MD5Util.md5((address+serviceName).getBytes());
79+
80+
logger.info("getInvoker->address->"+address+",md5-->"+md5);
81+
82+
if(val.equals(md5)){
83+
return invoker;
84+
}
85+
}
86+
return null;
87+
}
88+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.codingapi.tx.dubbo.balance;
2+
3+
import com.alibaba.dubbo.common.URL;
4+
import com.alibaba.dubbo.rpc.Invocation;
5+
import com.alibaba.dubbo.rpc.Invoker;
6+
import com.alibaba.dubbo.rpc.cluster.loadbalance.LeastActiveLoadBalance;
7+
8+
import java.util.List;
9+
10+
/**
11+
* create by lorne on 2017/11/29
12+
*/
13+
public class LeastActiveLoadBalanceProxy extends LeastActiveLoadBalance{
14+
15+
16+
private LCNBalanceProxy lcnBalanceProxy = new LCNBalanceProxy();
17+
18+
@Override
19+
public <T> Invoker<T> select(List<Invoker<T>> invokers, URL url, Invocation invocation) {
20+
return lcnBalanceProxy.proxy(invokers,super.select(invokers, url, invocation));
21+
}
22+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.codingapi.tx.dubbo.balance;
2+
3+
import com.alibaba.dubbo.common.URL;
4+
import com.alibaba.dubbo.rpc.Invocation;
5+
import com.alibaba.dubbo.rpc.Invoker;
6+
import com.alibaba.dubbo.rpc.cluster.loadbalance.RandomLoadBalance;
7+
8+
import java.util.List;
9+
10+
/**
11+
* create by lorne on 2017/11/29
12+
*/
13+
public class RandomLoadBalanceProxy extends RandomLoadBalance {
14+
15+
private LCNBalanceProxy lcnBalanceProxy = new LCNBalanceProxy();
16+
17+
@Override
18+
public <T> Invoker<T> select(List<Invoker<T>> invokers, URL url, Invocation invocation) {
19+
return lcnBalanceProxy.proxy(invokers,super.select(invokers, url, invocation));
20+
}
21+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.codingapi.tx.dubbo.balance;
2+
3+
import com.alibaba.dubbo.common.URL;
4+
import com.alibaba.dubbo.rpc.Invocation;
5+
import com.alibaba.dubbo.rpc.Invoker;
6+
import com.alibaba.dubbo.rpc.cluster.loadbalance.RoundRobinLoadBalance;
7+
8+
import java.util.List;
9+
10+
/**
11+
* create by lorne on 2017/11/29
12+
*/
13+
public class RoundRobinLoadBalanceProxy extends RoundRobinLoadBalance {
14+
15+
private LCNBalanceProxy lcnBalanceProxy = new LCNBalanceProxy();
16+
17+
@Override
18+
public <T> Invoker<T> select(List<Invoker<T>> invokers, URL url, Invocation invocation) {
19+
return lcnBalanceProxy.proxy(invokers,super.select(invokers, url, invocation));
20+
}
21+
}

transaction-dubbo/src/main/java/com/codingapi/tx/dubbo/service/impl/TimeOutServiceImpl.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,11 @@ public class TimeOutServiceImpl implements TimeOutService {
1919

2020
@Override
2121
public void loadOutTime(int timeOut) {
22-
int finalTimeOut = (null != providerConfig.getTimeout()) ? providerConfig.getTimeout() : (timeOut * 1000);
23-
Constants.maxOutTime = finalTimeOut;
22+
try {
23+
int providerTimeOut = providerConfig.getTimeout();
24+
Constants.maxOutTime = providerTimeOut;
25+
}catch (Exception e){
26+
Constants.maxOutTime = timeOut * 1000;
27+
}
2428
}
2529
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
transactionFilter=com.codingapi.tx.dubbo.filter.TransactionFilter

0 commit comments

Comments
 (0)