11package cn .springcloud .gray .event .server ;
22
3+ import cn .springcloud .gray .concurrent .DefaultThreadFactory ;
34import cn .springcloud .gray .event .GrayEvent ;
45import cn .springcloud .gray .keeper .ListKeeper ;
56import cn .springcloud .gray .keeper .SyncListKeeper ;
89
910import java .util .List ;
1011import 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}
0 commit comments