Skip to content

Commit f1c6ecd

Browse files
authored
Merge pull request #17 from codingapi/dev
Dev
2 parents 047eba0 + 90dc020 commit f1c6ecd

62 files changed

Lines changed: 1679 additions & 319 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.

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
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
lcn_random = com.codingapi.tx.dubbo.balance.RandomLoadBalanceProxy
2+
lcn_roundrobin = com.codingapi.tx.dubbo.balance.RoundRobinLoadBalanceProxy
3+
lcn_leastactive = com.codingapi.tx.dubbo.balance.LeastActiveLoadBalanceProxy
4+
lcn_consistenthash = com.codingapi.tx.dubbo.balance.ConsistentHashLoadBalanceProxy

0 commit comments

Comments
 (0)