Skip to content

Commit f1bf897

Browse files
committed
server端管理gray track
1 parent ef8da63 commit f1bf897

File tree

29 files changed

+549
-47
lines changed

29 files changed

+549
-47
lines changed

spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/config/GrayEventAutoConfiguration.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import cn.springcloud.gray.event.GrayEventListener;
66
import cn.springcloud.gray.event.stream.StreamInput;
77
import cn.springcloud.gray.event.stream.StreamMessageListener;
8+
import cn.springcloud.gray.request.track.CommunicableGrayTrackHolder;
89
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
910
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
1011
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
@@ -18,8 +19,9 @@ public class GrayEventAutoConfiguration {
1819

1920
@Bean
2021
@ConditionalOnMissingBean
21-
public GrayEventListener grayEventListener(CommunicableGrayManager grayManager) {
22-
return new DefaultGrayEventListener(grayManager);
22+
public GrayEventListener grayEventListener(
23+
CommunicableGrayTrackHolder grayTrackHolder, CommunicableGrayManager grayManager) {
24+
return new DefaultGrayEventListener(grayTrackHolder, grayManager);
2325
}
2426

2527

spring-cloud-gray-client/src/main/java/cn/springcloud/gray/event/DefaultGrayEventListener.java

Lines changed: 43 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,32 @@
11
package cn.springcloud.gray.event;
22

33
import cn.springcloud.gray.CommunicableGrayManager;
4+
import cn.springcloud.gray.InstanceLocalInfo;
5+
import cn.springcloud.gray.InstanceLocalInfoAware;
46
import cn.springcloud.gray.exceptions.EventException;
57
import cn.springcloud.gray.model.GrayInstance;
8+
import cn.springcloud.gray.model.GrayTrackDefinition;
9+
import cn.springcloud.gray.request.track.CommunicableGrayTrackHolder;
10+
import org.apache.commons.lang3.StringUtils;
611

712
import java.util.HashMap;
13+
import java.util.List;
814
import java.util.Map;
915
import java.util.Optional;
1016
import java.util.function.Consumer;
1117

12-
public class DefaultGrayEventListener implements GrayEventListener {
18+
public class DefaultGrayEventListener implements GrayEventListener, InstanceLocalInfoAware {
1319

1420
private CommunicableGrayManager grayManager;
21+
private CommunicableGrayTrackHolder grayTrackHolder;
22+
private InstanceLocalInfo instanceLocalInfo;
1523

1624
private Map<SourceType, Consumer<GrayEventMsg>> handers = new HashMap<>();
1725

18-
public DefaultGrayEventListener(CommunicableGrayManager grayManager) {
26+
public DefaultGrayEventListener(CommunicableGrayTrackHolder grayTrackHolder, CommunicableGrayManager grayManager) {
1927
this.grayManager = grayManager;
28+
initHandlers();
29+
this.grayTrackHolder = grayTrackHolder;
2030
}
2131

2232
@Override
@@ -59,7 +69,37 @@ private void handleGrayInstance(GrayEventMsg msg) {
5969
}
6070

6171
private void handleGrayTrack(GrayEventMsg msg) {
62-
//todo
72+
if (!StringUtils.equals(msg.getServiceId(), instanceLocalInfo.getServiceId())) {
73+
return;
74+
}
75+
if (StringUtils.isNotEmpty(msg.getInstanceId())
76+
&& !StringUtils.equals(msg.getInstanceId(), instanceLocalInfo.getInstanceId())) {
77+
return;
78+
}
79+
80+
GrayTrackDefinition definition = (GrayTrackDefinition) msg.getExtra();
81+
if (definition == null) {
82+
List<GrayTrackDefinition> definitions =
83+
grayTrackHolder.getGrayInformationClient().getTrackDefinitions(msg.getServiceId(), msg.getInstanceId());
84+
if (definitions != null) {
85+
definitions.forEach(d -> {
86+
grayTrackHolder.updateTrackDefinition(d);
87+
});
88+
}
89+
} else {
90+
switch (msg.getEventType()) {
91+
case DOWN:
92+
grayTrackHolder.deleteTrackDefinition(definition.getName());
93+
case UPDATE:
94+
grayTrackHolder.updateTrackDefinition(definition);
95+
}
96+
}
6397

98+
99+
}
100+
101+
@Override
102+
public void setInstanceLocalInfo(InstanceLocalInfo instanceLocalInfo) {
103+
this.instanceLocalInfo = instanceLocalInfo;
64104
}
65105
}
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@
77

88
import java.util.List;
99

10-
public abstract class AbstractCommunicableTrayTrackHolder extends SimpleGrayTrackHolder implements CommunicableTrayTrackHolder {
10+
public abstract class AbstractCommunicableGrayTrackHolder extends SimpleGrayTrackHolder implements CommunicableGrayTrackHolder {
1111

1212

1313
private InformationClient informationClient;
1414

15-
public AbstractCommunicableTrayTrackHolder(
15+
public AbstractCommunicableGrayTrackHolder(
1616
InformationClient informationClient,
1717
List<GrayInfoTracker<? extends GrayTrackInfo, ?>> trackers,
1818
List<GrayTrackDefinition> trackDefinitions) {
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22

33
import cn.springcloud.gray.GrayServerCommunicable;
44

5-
public interface CommunicableTrayTrackHolder extends GrayServerCommunicable, GrayTrackHolder {
5+
public interface CommunicableGrayTrackHolder extends GrayServerCommunicable, GrayTrackHolder {
66
}

spring-cloud-gray-client/src/main/java/cn/springcloud/gray/request/track/DefaultGrayTrackHolder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
import java.util.concurrent.ConcurrentHashMap;
1717

1818
@Slf4j
19-
public class DefaultGrayTrackHolder extends AbstractCommunicableTrayTrackHolder implements InstanceLocalInfoAware {
19+
public class DefaultGrayTrackHolder extends AbstractCommunicableGrayTrackHolder implements InstanceLocalInfoAware {
2020

2121
private Timer updateTimer = new Timer("Gray-Track-Update-Timer", true);
2222
private GrayTrackProperties grayTrackProperties;

spring-cloud-gray-core/src/main/java/cn/springcloud/gray/event/GrayEventMsg.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,6 @@ public class GrayEventMsg implements Serializable {
1616
private EventType eventType;
1717
private SourceType sourceType;
1818

19+
private Object extra;
20+
1921
}

spring-cloud-gray-samples/spring-cloud-gray-server-sample/src/main/resources/config/application.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ spring:
1919
show-sql: true
2020
generate-ddl: true
2121
hibernate:
22-
ddl-auto: none
22+
ddl-auto: update
2323
rabbitmq:
2424
addresses: 127.0.0.1:5672
2525
username: admin
@@ -40,7 +40,7 @@ spring:
4040
# GrayEventInput:
4141
# consumer:
4242
# maxConcurrency: 1 #并发数
43-
# prefetch: 1 #从mq一次获取消息的数量
43+
# prefetch: 1 #从mq一次获取消息的数量
4444
# requeueRejected: true #spring cloud stream 如果出现异常, 是否需要重新投递消息, false表示丢弃。 也有相应的Exception, true-MessageRejectedWhileStoppingException false-AmqpRejectAndDontRequeueException
4545
# auto-bind-dlq: true
4646
# acknowledgeMode: AUTO
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package cn.springcloud.gray.service.test;
2+
3+
import cn.springcloud.gray.server.app.GrayServerApplication;
4+
import cn.springcloud.gray.server.module.domain.GrayTrack;
5+
import cn.springcloud.gray.server.service.GrayTrackService;
6+
import lombok.extern.slf4j.Slf4j;
7+
import org.junit.Test;
8+
import org.junit.runner.RunWith;
9+
import org.springframework.beans.factory.annotation.Autowired;
10+
import org.springframework.boot.test.context.SpringBootTest;
11+
import org.springframework.test.context.ActiveProfiles;
12+
import org.springframework.test.context.junit4.SpringRunner;
13+
14+
@ActiveProfiles({"dev"})
15+
@RunWith(SpringRunner.class)
16+
@SpringBootTest(classes = GrayServerApplication.class)
17+
@Slf4j
18+
public class GrayTrackServiceTest {
19+
20+
@Autowired
21+
private GrayTrackService grayTrackService;
22+
23+
@Test
24+
public void test1() {
25+
GrayTrack grayTrack = GrayTrack.builder()
26+
.id(1L)
27+
.serviceId("a")
28+
.instanceId("")
29+
.name("test")
30+
.infos("infos")
31+
.build();
32+
33+
grayTrackService.saveModel(grayTrack);
34+
35+
36+
grayTrackService.saveModel(GrayTrack.builder()
37+
.serviceId("a")
38+
.name("test2")
39+
.infos("infos2")
40+
.build());
41+
42+
grayTrackService.saveModel(GrayTrack.builder()
43+
.serviceId("a")
44+
.instanceId("a-1")
45+
.name("test2")
46+
.infos("infos2")
47+
.build());
48+
49+
GrayTrack grayTrack1 = grayTrackService.findOneModel(1L);
50+
log.info(grayTrack1.toString());
51+
52+
}
53+
}

spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/configuration/DBStorageConfiguration.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,10 @@
22

33
import cn.springcloud.gray.event.GrayEventPublisher;
44
import cn.springcloud.gray.server.module.GrayServerModule;
5+
import cn.springcloud.gray.server.module.GrayServerTrackModule;
56
import cn.springcloud.gray.server.module.SimpleGrayServerModule;
6-
import cn.springcloud.gray.server.service.GrayDecisionService;
7-
import cn.springcloud.gray.server.service.GrayInstanceService;
8-
import cn.springcloud.gray.server.service.GrayPolicyService;
9-
import cn.springcloud.gray.server.service.GrayServiceService;
7+
import cn.springcloud.gray.server.module.SimpleGrayServerTrackModule;
8+
import cn.springcloud.gray.server.service.*;
109
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
1110
import org.springframework.boot.autoconfigure.domain.EntityScan;
1211
import org.springframework.context.annotation.Bean;
@@ -38,6 +37,13 @@ public GrayServerModule grayServerModule(
3837
GrayDecisionService grayDecisionService, GrayPolicyService grayPolicyService) {
3938
return new SimpleGrayServerModule(grayEventPublisher, grayServiceService, grayInstanceService, grayDecisionService, grayPolicyService);
4039
}
40+
41+
42+
@Bean
43+
public GrayServerTrackModule grayServerTrackModule(GrayEventPublisher grayEventPublisher, GrayTrackService grayTrackService) {
44+
return new SimpleGrayServerTrackModule(grayEventPublisher, grayTrackService);
45+
}
46+
4147
}
4248

4349
@Bean

spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/configuration/GrayServerAutoConfiguration.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
package cn.springcloud.gray.server.configuration;
22

33
import cn.springcloud.gray.event.GrayEventPublisher;
4-
import cn.springcloud.gray.server.*;
4+
import cn.springcloud.gray.server.GrayServerInitializingDestroyBean;
55
import cn.springcloud.gray.server.configuration.properties.GrayServerProperties;
66
import cn.springcloud.gray.server.event.DefaultGrayEventPublisher;
77
import cn.springcloud.gray.server.evictor.GrayServerEvictor;
88
import cn.springcloud.gray.server.evictor.NoActionGrayServerEvictor;
99
import cn.springcloud.gray.server.manager.DefaultGrayServiceManager;
1010
import cn.springcloud.gray.server.manager.GrayServiceManager;
11-
import cn.springcloud.gray.server.module.GrayModle;
11+
import cn.springcloud.gray.server.module.GrayModule;
1212
import cn.springcloud.gray.server.module.GrayServerModule;
13+
import cn.springcloud.gray.server.module.GrayServerTrackModule;
1314
import cn.springcloud.gray.server.module.SimpleGrayModule;
1415
import com.fasterxml.jackson.databind.ObjectMapper;
1516
import org.springframework.beans.factory.annotation.Autowired;
@@ -57,11 +58,13 @@ public GrayServerEvictor grayServerEvictor() {
5758

5859
@Bean
5960
@ConditionalOnMissingBean
60-
public GrayModle grayModle(GrayServerModule grayServerModule, @Autowired(required = false) ObjectMapper objectMapper) {
61+
public GrayModule grayModule(
62+
GrayServerModule grayServerModule, GrayServerTrackModule grayServerTrackModule,
63+
@Autowired(required = false) ObjectMapper objectMapper) {
6164
if (objectMapper == null) {
6265
objectMapper = new ObjectMapper();
6366
}
64-
return new SimpleGrayModule(grayServerModule, objectMapper);
67+
return new SimpleGrayModule(grayServerModule, grayServerTrackModule, objectMapper);
6568
}
6669

6770
@Bean

0 commit comments

Comments
 (0)