Skip to content

Commit 9ccbb80

Browse files
committed
添加triggering异步逻辑
1 parent 3ca7371 commit 9ccbb80

File tree

4 files changed

+78
-24
lines changed

4 files changed

+78
-24
lines changed

spring-cloud-gray-event/src/main/java/cn/springcloud/gray/event/server/AbstractGrayEventTrigger.java

Lines changed: 47 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package cn.springcloud.gray.event.server;
22

3+
import cn.springcloud.gray.concurrent.DefaultThreadFactory;
34
import cn.springcloud.gray.event.GrayEvent;
45
import cn.springcloud.gray.keeper.ListKeeper;
56
import cn.springcloud.gray.keeper.SyncListKeeper;
@@ -8,6 +9,10 @@
89

910
import java.util.List;
1011
import java.util.Objects;
12+
import java.util.concurrent.ArrayBlockingQueue;
13+
import java.util.concurrent.ExecutorService;
14+
import java.util.concurrent.ThreadPoolExecutor;
15+
import java.util.concurrent.TimeUnit;
1116

1217
/**
1318
* @author saleson
@@ -19,13 +24,17 @@ public abstract class AbstractGrayEventTrigger implements GrayEventTrigger {
1924
private GrayEventSender grayEventSender;
2025
private GenericRetriever<EventConverter> genericRetriever;
2126
private ListKeeper<GrayEventObserver> grayEventObservers = new SyncListKeeper<>();
27+
private ExecutorService executorService;
28+
private long triggerDelayMills = 100;
2229

2330
public AbstractGrayEventTrigger(GrayEventSender grayEventSender) {
24-
this(grayEventSender, null);
31+
this(grayEventSender, null,
32+
new ThreadPoolExecutor(10, 50, 30, TimeUnit.SECONDS, new ArrayBlockingQueue<>(100), new DefaultThreadFactory("event-trigger")));
2533
}
2634

27-
public AbstractGrayEventTrigger(GrayEventSender grayEventSender, List<EventConverter> eventConverters) {
35+
public AbstractGrayEventTrigger(GrayEventSender grayEventSender, List<EventConverter> eventConverters, ExecutorService executorService) {
2836
this.grayEventSender = grayEventSender;
37+
this.executorService = executorService;
2938
if (!Objects.isNull(eventConverters)) {
3039
createEventConverterRetriever(eventConverters);
3140
}
@@ -34,22 +43,16 @@ public AbstractGrayEventTrigger(GrayEventSender grayEventSender, List<EventConve
3443

3544
@Override
3645
public void triggering(Object eventSource, TriggerType triggerType) {
37-
GrayEvent grayEvent = convertGrayEvent(eventSource, triggerType);
38-
if (Objects.isNull(grayEvent)) {
39-
// log.warn("转换失败, grayEvent is null, eventSource:{}, triggerType:{}", eventSource, triggerType);
40-
return;
41-
}
42-
43-
if (Objects.isNull(grayEvent.getTriggerType())) {
44-
grayEvent.setTriggerType(triggerType);
45-
}
46-
47-
noticeObservers(GrayEventObserveState.CREATED, grayEvent);
48-
49-
// noticeObservers(GrayEventObserveState.READY_FOR_SENDING, grayEvent);
50-
grayEventSender.send(grayEvent);
51-
52-
noticeObservers(GrayEventObserveState.SENT, grayEvent);
46+
executorService.execute(() -> {
47+
long triggerDelay = getTriggerDelayMills();
48+
if (triggerDelay > 0) {
49+
try {
50+
Thread.sleep(triggerDelay);
51+
} catch (InterruptedException e) {
52+
}
53+
}
54+
innerTriggering(eventSource, triggerType);
55+
});
5356
}
5457

5558
protected abstract void logEventTrigger(Object eventSource, TriggerType triggerType, GrayEvent grayEvent);
@@ -72,6 +75,25 @@ public List<GrayEventObserver> getObservers() {
7275
return grayEventObservers.values();
7376
}
7477

78+
protected void innerTriggering(Object eventSource, TriggerType triggerType) {
79+
GrayEvent grayEvent = convertGrayEvent(eventSource, triggerType);
80+
if (Objects.isNull(grayEvent)) {
81+
// log.warn("转换失败, grayEvent is null, eventSource:{}, triggerType:{}", eventSource, triggerType);
82+
return;
83+
}
84+
85+
if (Objects.isNull(grayEvent.getTriggerType())) {
86+
grayEvent.setTriggerType(triggerType);
87+
}
88+
89+
noticeObservers(GrayEventObserveState.CREATED, grayEvent);
90+
91+
// noticeObservers(GrayEventObserveState.READY_FOR_SENDING, grayEvent);
92+
grayEventSender.send(grayEvent);
93+
94+
noticeObservers(GrayEventObserveState.SENT, grayEvent);
95+
}
96+
7597
protected void noticeObservers(GrayEventObserveState observeState, GrayEvent grayEvent) {
7698
getObservers().forEach(observer -> observer.observe(observeState, grayEvent));
7799
}
@@ -97,4 +119,11 @@ protected EventConverter getEventConverter(Class<?> sourceCls) {
97119
}
98120

99121

122+
public void setTriggerDelayMills(long triggerDelayMills) {
123+
this.triggerDelayMills = triggerDelayMills;
124+
}
125+
126+
public long getTriggerDelayMills() {
127+
return triggerDelayMills;
128+
}
100129
}

spring-cloud-gray-event/src/main/java/cn/springcloud/gray/event/server/DefaultGrayEventTrigger.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import cn.springcloud.gray.event.GrayEvent;
44

55
import java.util.List;
6+
import java.util.concurrent.ExecutorService;
67

78
/**
89
* @author saleson
@@ -12,13 +13,19 @@ public class DefaultGrayEventTrigger extends AbstractGrayEventTrigger {
1213

1314
private GrayEventLogger grayEventLogger;
1415

15-
public DefaultGrayEventTrigger(GrayEventSender grayEventSender, GrayEventLogger grayEventLogger) {
16-
this(grayEventSender, null, grayEventLogger);
16+
public DefaultGrayEventTrigger(
17+
GrayEventSender grayEventSender,
18+
GrayEventLogger grayEventLogger,
19+
ExecutorService executorService) {
20+
this(grayEventSender, null, grayEventLogger, executorService);
1721
}
1822

1923
public DefaultGrayEventTrigger(
20-
GrayEventSender grayEventSender, List<EventConverter> eventConverters, GrayEventLogger grayEventLogger) {
21-
super(grayEventSender, eventConverters);
24+
GrayEventSender grayEventSender,
25+
List<EventConverter> eventConverters,
26+
GrayEventLogger grayEventLogger,
27+
ExecutorService executorService) {
28+
super(grayEventSender, eventConverters, executorService);
2229
this.grayEventLogger = grayEventLogger;
2330
}
2431

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

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

3+
import cn.springcloud.gray.concurrent.ExectorServiceUtils;
34
import cn.springcloud.gray.event.codec.GrayEventCodec;
45
import cn.springcloud.gray.event.codec.JsonGrayEventCodec;
56
import cn.springcloud.gray.event.server.*;
@@ -13,13 +14,15 @@
1314
import com.fasterxml.jackson.databind.DeserializationFeature;
1415
import com.fasterxml.jackson.databind.ObjectMapper;
1516
import org.springframework.beans.factory.annotation.Autowired;
17+
import org.springframework.beans.factory.annotation.Qualifier;
1618
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
1719
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
1820
import org.springframework.context.annotation.Bean;
1921
import org.springframework.context.annotation.Configuration;
2022

2123
import java.util.List;
2224
import java.util.Objects;
25+
import java.util.concurrent.ExecutorService;
2326

2427
/**
2528
* @author saleson
@@ -57,11 +60,21 @@ public GrayEventLogger grayEventLogger(GrayEventLogModule grayEventLogModule, Gr
5760
}
5861

5962

63+
@Bean
64+
@ConditionalOnMissingBean(name = "eventTriggerExecutorService")
65+
public ExecutorService eventTriggerExecutorService() {
66+
return ExectorServiceUtils.createExecutorService(grayServerEventProperties.getTriggerThreadPool());
67+
}
68+
6069
@Bean
6170
@ConditionalOnMissingBean
6271
public GrayEventTrigger grayEventTrigger(
63-
GrayEventSender grayEventSender, GrayEventLogger grayEventLogger) {
64-
return new DefaultGrayEventTrigger(grayEventSender, grayEventLogger);
72+
GrayEventSender grayEventSender,
73+
GrayEventLogger grayEventLogger,
74+
@Autowired @Qualifier("eventTriggerExecutorService") ExecutorService eventTriggerExecutorService) {
75+
AbstractGrayEventTrigger eventTrigger = new DefaultGrayEventTrigger(grayEventSender, grayEventLogger, eventTriggerExecutorService);
76+
eventTrigger.setTriggerDelayMills(grayServerEventProperties.getTriggerDelayMills());
77+
return eventTrigger;
6578
}
6679

6780
@Bean

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package cn.springcloud.gray.server.configuration.properties;
22

3+
import cn.springcloud.gray.concurrent.ConcurrnetProperties;
34
import lombok.Data;
45
import org.springframework.boot.context.properties.ConfigurationProperties;
56

@@ -23,6 +24,10 @@ public class GrayServerEventProperties {
2324

2425
private EventTypeMapping eventTypeMapping = new EventTypeMapping();
2526

27+
private ConcurrnetProperties triggerThreadPool = new ConcurrnetProperties(5, 20, 30000, 100, "event-trigger");
28+
29+
private long triggerDelayMills = 100;
30+
2631
@Data
2732
public static class EventTypeMapping {
2833
private List<String> clesses = new ArrayList<>();

0 commit comments

Comments
 (0)