Skip to content

Commit 9b8dee3

Browse files
author
1991wangliang@gmail.com
committed
修复负载均衡时的bug.
1 parent 4d91bf3 commit 9b8dee3

8 files changed

Lines changed: 101 additions & 98 deletions

File tree

pom.xml

Lines changed: 39 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -53,15 +53,20 @@
5353
<txlcn-hessian.version>4.0.38</txlcn-hessian.version>
5454
<txlcn-protostuff.version>1.1.3</txlcn-protostuff.version>
5555
<txlcn-kryo.version>4.0.0</txlcn-kryo.version>
56-
<txlcn-com.alibaba.boot.dubbo.version>0.2.0</txlcn-com.alibaba.boot.dubbo.version>
57-
<txlcn-brave-instrumentation.version>5.4.3</txlcn-brave-instrumentation.version>
56+
5857
<txlcn-com.lmax.disruptor.version>3.4.2</txlcn-com.lmax.disruptor.version>
5958
<txlcn-commons-dbutils.version>1.7</txlcn-commons-dbutils.version>
6059
<txlcn-com.github.jsqlparser.version>1.3</txlcn-com.github.jsqlparser.version>
6160
<txlcn-com.h2database.version>1.4.197</txlcn-com.h2database.version>
6261
<txlcn-hikari-cp.version>3.1.0</txlcn-hikari-cp.version>
6362
<txlcn-com.github.pagehelper.version>1.2.10</txlcn-com.github.pagehelper.version>
6463
<txlcn-org.mybatis.spring.boot.version>1.3.2</txlcn-org.mybatis.spring.boot.version>
64+
<txlcn-org.springframework.spring-webmvc.version>5.1.4.RELEASE</txlcn-org.springframework.spring-webmvc.version>
65+
<txlcn-javax.servlet-api.version>4.0.1</txlcn-javax.servlet-api.version>
66+
<txlcn-com.alibaba.dubbo.verion>2.6.5</txlcn-com.alibaba.dubbo.verion>
67+
<txlcn-com.netflix.feign.core.verison>8.18.0</txlcn-com.netflix.feign.core.verison>
68+
<txlcn-com.netflix.ribbon.loadbalancer.version>2.3.0</txlcn-com.netflix.ribbon.loadbalancer.version>
69+
<txlcn-org.springframework.cloud.commons.version>2.1.0.RELEASE</txlcn-org.springframework.cloud.commons.version>
6570
</properties>
6671

6772

@@ -225,18 +230,6 @@
225230
<version>${txlcn-com.alibaba.fastjson.version}</version>
226231
</dependency>
227232

228-
<dependency>
229-
<groupId>com.alibaba.boot</groupId>
230-
<artifactId>dubbo-spring-boot-starter</artifactId>
231-
<version>${txlcn-com.alibaba.boot.dubbo.version}</version>
232-
</dependency>
233-
234-
<dependency>
235-
<groupId>io.zipkin.brave</groupId>
236-
<artifactId>brave-instrumentation-dubbo-rpc</artifactId>
237-
<version>${txlcn-brave-instrumentation.version}</version>
238-
</dependency>
239-
240233
<dependency>
241234
<groupId>com.caucho</groupId>
242235
<artifactId>hessian</artifactId>
@@ -267,12 +260,40 @@
267260
<version>${txlcn-guava.version}</version>
268261
</dependency>
269262

263+
<dependency>
264+
<groupId>org.springframework</groupId>
265+
<artifactId>spring-webmvc</artifactId>
266+
<version>${txlcn-org.springframework.spring-webmvc.version}</version>
267+
</dependency>
268+
269+
<dependency>
270+
<groupId>javax.servlet</groupId>
271+
<artifactId>javax.servlet-api</artifactId>
272+
<version>${txlcn-javax.servlet-api.version}</version>
273+
</dependency>
274+
275+
<dependency>
276+
<groupId>com.alibaba</groupId>
277+
<artifactId>dubbo</artifactId>
278+
<version>${txlcn-com.alibaba.dubbo.verion}</version>
279+
</dependency>
280+
281+
<dependency>
282+
<groupId>com.netflix.feign</groupId>
283+
<artifactId>feign-core</artifactId>
284+
<version>${txlcn-com.netflix.feign.core.verison}</version>
285+
</dependency>
286+
287+
<dependency>
288+
<groupId>com.netflix.ribbon</groupId>
289+
<artifactId>ribbon-loadbalancer</artifactId>
290+
<version>${txlcn-com.netflix.ribbon.loadbalancer.version}</version>
291+
</dependency>
292+
270293
<dependency>
271294
<groupId>org.springframework.cloud</groupId>
272-
<artifactId>spring-cloud-dependencies</artifactId>
273-
<version>${txlcn-spring-cloud.version}</version>
274-
<type>pom</type>
275-
<scope>import</scope>
295+
<artifactId>spring-cloud-commons</artifactId>
296+
<version>${txlcn-org.springframework.cloud.commons.version}</version>
276297
</dependency>
277298

278299
</dependencies>

txlcn-tracing/pom.xml

Lines changed: 0 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,6 @@
1212
<artifactId>txlcn-tracing</artifactId>
1313
<name>txlcn-tracing</name>
1414

15-
<properties>
16-
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
17-
<maven.compiler.source>1.7</maven.compiler.source>
18-
<maven.compiler.target>1.7</maven.compiler.target>
19-
</properties>
2015

2116
<dependencies>
2217

@@ -28,93 +23,39 @@
2823
<dependency>
2924
<groupId>org.springframework</groupId>
3025
<artifactId>spring-webmvc</artifactId>
31-
<version>5.1.4.RELEASE</version>
3226
<scope>provided</scope>
3327
</dependency>
3428

35-
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
3629
<dependency>
3730
<groupId>javax.servlet</groupId>
3831
<artifactId>javax.servlet-api</artifactId>
39-
<version>4.0.1</version>
4032
<scope>provided</scope>
4133
</dependency>
4234

43-
<!-- https://mvnrepository.com/artifact/com.alibaba/dubbo -->
4435
<dependency>
4536
<groupId>com.alibaba</groupId>
4637
<artifactId>dubbo</artifactId>
47-
<version>2.6.5</version>
4838
<scope>provided</scope>
4939
</dependency>
5040

5141
<dependency>
5242
<groupId>com.netflix.feign</groupId>
5343
<artifactId>feign-core</artifactId>
54-
<version>8.18.0</version>
5544
<scope>provided</scope>
5645
</dependency>
5746

5847
<dependency>
5948
<groupId>com.netflix.ribbon</groupId>
6049
<artifactId>ribbon-loadbalancer</artifactId>
61-
<version>2.3.0</version>
6250
<scope>provided</scope>
6351
</dependency>
6452

6553
<dependency>
6654
<groupId>org.springframework.cloud</groupId>
6755
<artifactId>spring-cloud-commons</artifactId>
68-
<version>2.1.0.RELEASE</version>
6956
<scope>compile</scope>
7057
</dependency>
7158

72-
7359
</dependencies>
7460

75-
<build>
76-
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
77-
<plugins>
78-
<!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
79-
<plugin>
80-
<artifactId>maven-clean-plugin</artifactId>
81-
<version>3.1.0</version>
82-
</plugin>
83-
<!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
84-
<plugin>
85-
<artifactId>maven-resources-plugin</artifactId>
86-
<version>3.0.2</version>
87-
</plugin>
88-
<plugin>
89-
<artifactId>maven-compiler-plugin</artifactId>
90-
<version>3.8.0</version>
91-
</plugin>
92-
<plugin>
93-
<artifactId>maven-surefire-plugin</artifactId>
94-
<version>2.22.1</version>
95-
</plugin>
96-
<plugin>
97-
<artifactId>maven-jar-plugin</artifactId>
98-
<version>3.0.2</version>
99-
</plugin>
100-
<plugin>
101-
<artifactId>maven-install-plugin</artifactId>
102-
<version>2.5.2</version>
103-
</plugin>
104-
<plugin>
105-
<artifactId>maven-deploy-plugin</artifactId>
106-
<version>2.8.2</version>
107-
</plugin>
108-
<!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
109-
<plugin>
110-
<artifactId>maven-site-plugin</artifactId>
111-
<version>3.7.1</version>
112-
</plugin>
113-
<plugin>
114-
<artifactId>maven-project-info-reports-plugin</artifactId>
115-
<version>3.0.0</version>
116-
</plugin>
117-
</plugins>
118-
</pluginManagement>
119-
</build>
12061
</project>

txlcn-tracing/src/main/java/com/codingapi/txlcn/tracing/dubbo/DubboTxlcnLoadBalance.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,15 @@
3535
*/
3636
@Slf4j
3737
class DubboTxlcnLoadBalance {
38+
3839
private static final String empty = "";
3940

4041
static <T> Invoker<T> chooseInvoker(List<Invoker<T>> invokers, URL url, Invocation invocation, TxLcnLoadBalance loadBalance) {
42+
43+
//非分布式事务直接执行默认业务.
44+
if(!TracingContext.tracing().hasGroup()){
45+
return loadBalance.select(invokers, url, invocation);
46+
}
4147
TracingContext.tracing()
4248
.addApp(RpcContext.getContext().getLocalAddressString(), empty);
4349
assert invokers.size() > 0;

txlcn-tracing/src/main/java/com/codingapi/txlcn/tracing/http/FeignRequestInterceptor.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,9 @@ public class FeignRequestInterceptor implements RequestInterceptor {
3737

3838
@Override
3939
public void apply(RequestTemplate requestTemplate) {
40-
requestTemplate.header(TracingConstants.HEADER_KEY_GROUP_ID, TracingContext.tracing().groupId());
41-
requestTemplate.header(TracingConstants.HEADER_KEY_APP_MAP, TracingContext.tracing().appMapBase64String());
40+
if (TracingContext.tracing().hasGroup()) {
41+
requestTemplate.header(TracingConstants.HEADER_KEY_GROUP_ID, TracingContext.tracing().groupId());
42+
requestTemplate.header(TracingConstants.HEADER_KEY_APP_MAP, TracingContext.tracing().appMapBase64String());
43+
}
4244
}
4345
}

txlcn-tracing/src/main/java/com/codingapi/txlcn/tracing/http/RestTemplateRequestInterceptor.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,10 @@ public class RestTemplateRequestInterceptor implements ClientHttpRequestIntercep
4545
public ClientHttpResponse intercept(
4646
@NonNull HttpRequest httpRequest, @NonNull byte[] bytes,
4747
@NonNull ClientHttpRequestExecution clientHttpRequestExecution) throws IOException {
48-
httpRequest.getHeaders().add(TracingConstants.HEADER_KEY_GROUP_ID, TracingContext.tracing().groupId());
49-
httpRequest.getHeaders().add(TracingConstants.HEADER_KEY_APP_MAP, TracingContext.tracing().appMapBase64String());
48+
if (TracingContext.tracing().hasGroup()) {
49+
httpRequest.getHeaders().add(TracingConstants.HEADER_KEY_GROUP_ID, TracingContext.tracing().groupId());
50+
httpRequest.getHeaders().add(TracingConstants.HEADER_KEY_APP_MAP, TracingContext.tracing().appMapBase64String());
51+
}
5052
return clientHttpRequestExecution.execute(httpRequest, bytes);
5153
}
5254
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/*
2+
* Copyright 2017-2019 CodingApi .
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package com.codingapi.txlcn.tracing.http.ribbon;
17+
18+
import org.springframework.boot.context.properties.ConfigurationProperties;
19+
import org.springframework.boot.context.properties.EnableConfigurationProperties;
20+
21+
/**
22+
* Description: springcloud ribbon 开启注解配置
23+
* Date: 19-02-07 上午 00:08
24+
*
25+
* @author lorne
26+
*/
27+
@EnableConfigurationProperties(DTXLoadbalancer.class)
28+
@ConfigurationProperties("tx-lcn.ribbon.loadbalancer.dtx")
29+
public class DTXLoadbalancer {
30+
31+
private boolean enabled;
32+
33+
public boolean isEnabled() {
34+
return enabled;
35+
}
36+
37+
public void setEnabled(boolean enabled) {
38+
this.enabled = enabled;
39+
}
40+
41+
}

txlcn-tracing/src/main/java/com/codingapi/txlcn/tracing/http/ribbon/LoadbalancerConfiguration.java

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

1818
import com.netflix.loadbalancer.IRule;
1919
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
20-
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
2120
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
22-
import org.springframework.boot.context.properties.ConfigurationProperties;
23-
import org.springframework.boot.context.properties.EnableConfigurationProperties;
2421
import org.springframework.cloud.client.serviceregistry.Registration;
2522
import org.springframework.context.annotation.Bean;
2623
import org.springframework.context.annotation.Configuration;
@@ -33,23 +30,11 @@
3330
* @author ujued
3431
*/
3532
@Configuration
36-
@EnableConfigurationProperties(LoadbalancerConfiguration.class)
37-
@ConditionalOnClass(IRule.class)
38-
@ConfigurationProperties("tx-lcn.ribbon.loadbalancer.dtx")
39-
@ConditionalOnProperty(name = "tx-lcn.ribbon.loadbalancer.dtx.enabled", matchIfMissing = true)
4033
public class LoadbalancerConfiguration {
41-
private boolean enabled;
42-
43-
public boolean isEnabled() {
44-
return enabled;
45-
}
46-
47-
public void setEnabled(boolean enabled) {
48-
this.enabled = enabled;
49-
}
5034

5135
@Bean
52-
@ConditionalOnMissingBean
36+
@ConditionalOnClass(IRule.class)
37+
@ConditionalOnProperty(name = "tx-lcn.ribbon.loadbalancer.dtx.enabled", havingValue = "true")
5338
@Scope("prototype")
5439
public IRule ribbonRule(Registration registration) {
5540
return new TxlcnZoneAvoidanceRule(registration);

txlcn-tracing/src/main/java/com/codingapi/txlcn/tracing/http/ribbon/TxlcnZoneAvoidanceRule.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,11 @@ public TxlcnZoneAvoidanceRule() {
5050

5151
@Override
5252
public Server choose(Object key) {
53+
//非分布式事务直接执行默认业务.
54+
if(!TracingContext.tracing().hasGroup()){
55+
return super.choose(key);
56+
}
57+
5358
// 1. 自己加入此事务组调用链
5459
assert registration != null;
5560
TracingContext.tracing().addApp(registration.getServiceId(), registration.getHost() + ":" + registration.getPort());

0 commit comments

Comments
 (0)