1
1
package cn .springcloud .gray .event .server ;
2
2
3
+ import cn .springcloud .gray .concurrent .DefaultThreadFactory ;
3
4
import cn .springcloud .gray .event .GrayEvent ;
4
5
import cn .springcloud .gray .keeper .ListKeeper ;
5
6
import cn .springcloud .gray .keeper .SyncListKeeper ;
8
9
9
10
import java .util .List ;
10
11
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 ;
11
16
12
17
/**
13
18
* @author saleson
@@ -19,13 +24,17 @@ public abstract class AbstractGrayEventTrigger implements GrayEventTrigger {
19
24
private GrayEventSender grayEventSender ;
20
25
private GenericRetriever <EventConverter > genericRetriever ;
21
26
private ListKeeper <GrayEventObserver > grayEventObservers = new SyncListKeeper <>();
27
+ private ExecutorService executorService ;
28
+ private long triggerDelayMills = 100 ;
22
29
23
30
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" )));
25
33
}
26
34
27
- public AbstractGrayEventTrigger (GrayEventSender grayEventSender , List <EventConverter > eventConverters ) {
35
+ public AbstractGrayEventTrigger (GrayEventSender grayEventSender , List <EventConverter > eventConverters , ExecutorService executorService ) {
28
36
this .grayEventSender = grayEventSender ;
37
+ this .executorService = executorService ;
29
38
if (!Objects .isNull (eventConverters )) {
30
39
createEventConverterRetriever (eventConverters );
31
40
}
@@ -34,22 +43,16 @@ public AbstractGrayEventTrigger(GrayEventSender grayEventSender, List<EventConve
34
43
35
44
@ Override
36
45
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
+ });
53
56
}
54
57
55
58
protected abstract void logEventTrigger (Object eventSource , TriggerType triggerType , GrayEvent grayEvent );
@@ -72,6 +75,25 @@ public List<GrayEventObserver> getObservers() {
72
75
return grayEventObservers .values ();
73
76
}
74
77
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
+
75
97
protected void noticeObservers (GrayEventObserveState observeState , GrayEvent grayEvent ) {
76
98
getObservers ().forEach (observer -> observer .observe (observeState , grayEvent ));
77
99
}
@@ -97,4 +119,11 @@ protected EventConverter getEventConverter(Class<?> sourceCls) {
97
119
}
98
120
99
121
122
+ public void setTriggerDelayMills (long triggerDelayMills ) {
123
+ this .triggerDelayMills = triggerDelayMills ;
124
+ }
125
+
126
+ public long getTriggerDelayMills () {
127
+ return triggerDelayMills ;
128
+ }
100
129
}
0 commit comments