1
1
/*
2
- * Copyright 2021 Sonu Kumar
2
+ * Copyright 2023 Sonu Kumar
3
3
*
4
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
5
* you may not use this file except in compliance with the License.
28
28
import com .github .sonus21 .rqueue .core .RqueueMessageTemplate ;
29
29
import com .github .sonus21 .rqueue .core .RqueueRedisListenerContainerFactory ;
30
30
import com .github .sonus21 .rqueue .core .ScheduledQueueMessageScheduler ;
31
+ import com .github .sonus21 .rqueue .core .eventbus .EventBusErrorHandler ;
32
+ import com .github .sonus21 .rqueue .core .eventbus .RqueueEventBus ;
31
33
import com .github .sonus21 .rqueue .core .impl .RqueueMessageTemplateImpl ;
32
34
import com .github .sonus21 .rqueue .dao .RqueueStringDao ;
33
35
import com .github .sonus21 .rqueue .dao .impl .RqueueStringDaoImpl ;
37
39
import com .github .sonus21 .rqueue .utils .condition .ReactiveEnabled ;
38
40
import com .github .sonus21 .rqueue .utils .pebble .ResourceLoader ;
39
41
import com .github .sonus21 .rqueue .utils .pebble .RqueuePebbleExtension ;
42
+ import com .google .common .eventbus .AsyncEventBus ;
43
+ import com .google .common .eventbus .EventBus ;
40
44
import com .mitchellbosecke .pebble .PebbleEngine ;
41
45
import com .mitchellbosecke .pebble .spring .extension .SpringExtension ;
42
46
import com .mitchellbosecke .pebble .spring .reactive .PebbleReactiveViewResolver ;
45
49
import org .springframework .beans .factory .annotation .Qualifier ;
46
50
import org .springframework .beans .factory .annotation .Value ;
47
51
import org .springframework .beans .factory .config .ConfigurableBeanFactory ;
52
+ import org .springframework .context .ApplicationEventPublisher ;
48
53
import org .springframework .context .annotation .Bean ;
49
54
import org .springframework .context .annotation .Conditional ;
50
55
import org .springframework .data .redis .connection .ReactiveRedisConnectionFactory ;
51
56
import org .springframework .data .redis .connection .RedisConnectionFactory ;
52
57
import org .springframework .data .redis .core .RedisTemplate ;
58
+ import org .springframework .scheduling .concurrent .ThreadPoolTaskExecutor ;
53
59
54
60
/**
55
61
* This is a base configuration class for Rqueue, that is used in Spring and Spring boot Rqueue libs
@@ -105,8 +111,8 @@ protected MessageConverterProvider getMessageConverterProvider() {
105
111
* Database for different ops.
106
112
*
107
113
* @param beanFactory configurable bean factory
108
- * @param versionKey Rqueue db version key
109
- * @param dbVersion database version
114
+ * @param versionKey Rqueue db version key
115
+ * @param dbVersion database version
110
116
* @return {@link RedisConnectionFactory} object.
111
117
*/
112
118
@ Bean
@@ -150,6 +156,11 @@ public RqueueWebConfig rqueueWebConfig() {
150
156
return new RqueueWebConfig ();
151
157
}
152
158
159
+ @ Bean
160
+ public RqueueEventBusConfig rqueueEventBusConfig () {
161
+ return new RqueueEventBusConfig ();
162
+ }
163
+
153
164
@ Bean
154
165
public RqueueSchedulerConfig rqueueSchedulerConfig () {
155
166
return new RqueueSchedulerConfig ();
@@ -190,8 +201,14 @@ public RqueueRedisListenerContainerFactory rqueueRedisListenerContainerFactory()
190
201
* @return {@link ScheduledQueueMessageScheduler} object
191
202
*/
192
203
@ Bean
193
- public ScheduledQueueMessageScheduler scheduledMessageScheduler () {
194
- return new ScheduledQueueMessageScheduler ();
204
+ public ScheduledQueueMessageScheduler scheduledMessageScheduler (
205
+ RqueueSchedulerConfig rqueueSchedulerConfig ,
206
+ RqueueConfig rqueueConfig ,
207
+ RqueueEventBus eventBus ,
208
+ RqueueRedisListenerContainerFactory rqueueRedisListenerContainerFactory ,
209
+ @ Qualifier ("rqueueRedisLongTemplate" )
210
+ RedisTemplate <String , Long > redisTemplate ) {
211
+ return new ScheduledQueueMessageScheduler (rqueueSchedulerConfig , rqueueConfig , eventBus , rqueueRedisListenerContainerFactory , redisTemplate );
195
212
}
196
213
197
214
/**
@@ -201,8 +218,14 @@ public ScheduledQueueMessageScheduler scheduledMessageScheduler() {
201
218
* @return {@link ProcessingQueueMessageScheduler} object
202
219
*/
203
220
@ Bean
204
- public ProcessingQueueMessageScheduler processingMessageScheduler () {
205
- return new ProcessingQueueMessageScheduler ();
221
+ public ProcessingQueueMessageScheduler processingMessageScheduler (
222
+ RqueueSchedulerConfig rqueueSchedulerConfig ,
223
+ RqueueConfig rqueueConfig ,
224
+ RqueueEventBus eventBus ,
225
+ RqueueRedisListenerContainerFactory rqueueRedisListenerContainerFactory ,
226
+ @ Qualifier ("rqueueRedisLongTemplate" )
227
+ RedisTemplate <String , Long > redisTemplate ) {
228
+ return new ProcessingQueueMessageScheduler (rqueueSchedulerConfig , rqueueConfig , eventBus , rqueueRedisListenerContainerFactory , redisTemplate );
206
229
}
207
230
208
231
@ Bean
@@ -265,12 +288,27 @@ public RqueueInternalPubSubChannel rqueueInternalPubSubChannel(
265
288
RqueueConfig rqueueConfig ,
266
289
RqueueBeanProvider rqueueBeanProvider ,
267
290
@ Qualifier ("stringRqueueRedisTemplate" )
268
- RqueueRedisTemplate <String > stringRqueueRedisTemplate ) {
291
+ RqueueRedisTemplate <String > stringRqueueRedisTemplate ) {
269
292
return new RqueueInternalPubSubChannel (
270
293
rqueueRedisListenerContainerFactory ,
271
294
rqueueMessageListenerContainer ,
272
295
rqueueConfig ,
273
296
stringRqueueRedisTemplate ,
274
297
rqueueBeanProvider );
275
298
}
299
+
300
+ @ Bean
301
+ public RqueueEventBus rqueueEventBus (ApplicationEventPublisher applicationEventPublisher ,
302
+ RqueueEventBusConfig rqueueEventBusConfig ) {
303
+ ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor ();
304
+ threadPoolTaskExecutor .setCorePoolSize (rqueueEventBusConfig .getCorePoolSize ());
305
+ threadPoolTaskExecutor .setMaxPoolSize (rqueueEventBusConfig .getMaxPoolSize ());
306
+ threadPoolTaskExecutor .setKeepAliveSeconds (rqueueEventBusConfig .getKeepAliveTime ());
307
+ threadPoolTaskExecutor .setQueueCapacity (rqueueEventBusConfig .getQueueCapacity ());
308
+ threadPoolTaskExecutor .setThreadNamePrefix ("RqueueEventBusAsyncExecutor-" );
309
+ threadPoolTaskExecutor .initialize ();
310
+ EventBus eventBus = new AsyncEventBus (threadPoolTaskExecutor );
311
+ eventBus .register (new EventBusErrorHandler ());
312
+ return new RqueueEventBus (eventBus , applicationEventPublisher );
313
+ }
276
314
}
0 commit comments