21
21
22
22
import com .github .sonus21 .rqueue .annotation .MessageListener ;
23
23
import com .github .sonus21 .rqueue .annotation .RqueueListener ;
24
- import com .github .sonus21 .rqueue .core .DefaultRqueueMessageConverter ;
24
+ import com .github .sonus21 .rqueue .converter .DefaultMessageConverterProvider ;
25
+ import com .github .sonus21 .rqueue .converter .MessageConverterProvider ;
25
26
import com .github .sonus21 .rqueue .core .RqueueMessageTemplate ;
26
27
import com .github .sonus21 .rqueue .core .impl .RqueueMessageTemplateImpl ;
27
28
import com .github .sonus21 .rqueue .core .middleware .Middleware ;
31
32
import com .github .sonus21 .rqueue .models .enums .PriorityMode ;
32
33
import com .github .sonus21 .rqueue .utils .Constants ;
33
34
import com .github .sonus21 .rqueue .utils .backoff .TaskExecutionBackOff ;
34
- import java .util .Collections ;
35
35
import java .util .LinkedList ;
36
36
import java .util .List ;
37
37
import org .springframework .core .task .AsyncTaskExecutor ;
38
38
import org .springframework .core .task .TaskExecutor ;
39
39
import org .springframework .data .redis .connection .ReactiveRedisConnectionFactory ;
40
40
import org .springframework .data .redis .connection .RedisConnectionFactory ;
41
41
import org .springframework .messaging .MessageHeaders ;
42
- import org .springframework .messaging .converter .CompositeMessageConverter ;
43
42
import org .springframework .messaging .converter .MessageConverter ;
44
43
import org .springframework .util .CollectionUtils ;
45
44
52
51
@ SuppressWarnings ("WeakerAccess" )
53
52
public class SimpleRqueueListenerContainerFactory {
54
53
54
+ // The message converter provider that will return a message converter to convert messages to/from
55
+ private MessageConverterProvider messageConverterProvider ;
56
+
55
57
// Provide task executor, this can be used to provide some additional details like some threads
56
58
// name, etc otherwise a default task executor would be created
57
59
private AsyncTaskExecutor taskExecutor ;
@@ -63,8 +65,7 @@ public class SimpleRqueueListenerContainerFactory {
63
65
private ReactiveRedisConnectionFactory reactiveRedisConnectionFactory ;
64
66
// Custom requeue message handler
65
67
private RqueueMessageHandler rqueueMessageHandler ;
66
- // The message converter to convert messages to/from
67
- private MessageConverter messageConverter = new DefaultRqueueMessageConverter ();
68
+
68
69
// Send message poll time when no messages are available
69
70
private long pollingInterval = 200L ;
70
71
// In case of failure how much time, we should wait for next job
@@ -90,7 +91,8 @@ public class SimpleRqueueListenerContainerFactory {
90
91
91
92
private final List <Middleware > middlewares = new LinkedList <>();
92
93
93
- // Any message headers that should be set, only used for message serialization
94
+ // Any message headers that should be set, headers are NOT STORED in db so it should not be
95
+ // changed, same header is used in serialized and deserialization process.
94
96
private MessageHeaders messageHeaders ;
95
97
96
98
// Set priority mode for the pollers
@@ -158,11 +160,19 @@ public void setAutoStartup(boolean autoStartup) {
158
160
/**
159
161
* Return configured message handler
160
162
*
163
+ * @param messageConverterProvider message converter that will be used to serialize/deserialize
164
+ * message
161
165
* @return RqueueMessageHandler object
162
166
*/
163
- public RqueueMessageHandler getRqueueMessageHandler () {
167
+ public RqueueMessageHandler getRqueueMessageHandler (
168
+ MessageConverterProvider messageConverterProvider ) {
169
+ if (this .messageConverterProvider == null ) {
170
+ this .messageConverterProvider = messageConverterProvider ;
171
+ }
172
+ notNull (this .messageConverterProvider , "messageConverterProvider can not be null" );
164
173
if (rqueueMessageHandler == null ) {
165
- rqueueMessageHandler = new RqueueMessageHandler (getMessageConverter (), inspectAllBean );
174
+ rqueueMessageHandler =
175
+ new RqueueMessageHandler (messageConverterProvider .getConverter (), inspectAllBean );
166
176
}
167
177
return rqueueMessageHandler ;
168
178
}
@@ -227,46 +237,27 @@ public void setMaxNumWorkers(int maxNumWorkers) {
227
237
}
228
238
229
239
/**
230
- * @return the message converters
231
- * @deprecated use {@link #getMessageConverter()}
232
- */
233
- @ Deprecated
234
- public List <MessageConverter > getMessageConverters () {
235
- return Collections .singletonList (getMessageConverter ());
236
- }
237
-
238
- /**
239
- * For message (de)serialization we might need one or more message converters, configure those
240
- * message converters
240
+ * Message converter must be configured before calling this method.
241
241
*
242
- * @param messageConverters list of message converters
243
- * @deprecated use {@link #setMessageConverter(MessageConverter)}
242
+ * @throws IllegalAccessException when messageConverterProvider is null
243
+ * @return the message converter object
244
244
*/
245
- @ Deprecated
246
- public void setMessageConverters (List <MessageConverter > messageConverters ) {
247
- notEmpty (messageConverters , "messageConverters must not be empty" );
248
- if (messageConverters .size () == 1 ) {
249
- setMessageConverter (messageConverters .get (0 ));
250
- } else {
251
- setMessageConverter (new CompositeMessageConverter (messageConverters ));
245
+ public MessageConverter getMessageConverter () throws IllegalAccessException {
246
+ if (messageConverterProvider == null ) {
247
+ throw new IllegalAccessException ("messageConverterProvider is not configured" );
252
248
}
253
- }
254
-
255
- /** @return the message converter */
256
- public MessageConverter getMessageConverter () {
257
- return messageConverter ;
249
+ return messageConverterProvider .getConverter ();
258
250
}
259
251
260
252
/**
261
- * A default message converter {@link DefaultRqueueMessageConverter} is added that can handle all
262
- * type of data serialization/deserialization and all data is serialized to and from JSON. You can
263
- * use other mechanism to serialize/deserialize class object like MessagePack or any other format.
253
+ * Rqueue configures a default message converter that can convert message to/from for any object.
264
254
*
265
- * @param messageConverter the message converter
255
+ * @see DefaultMessageConverterProvider
256
+ * @param messageConverterProvider the message converter provider
266
257
*/
267
- public void setMessageConverter ( MessageConverter messageConverter ) {
268
- notNull (messageConverter , "message converter must not be null" );
269
- this .messageConverter = messageConverter ;
258
+ public void setMessageConverterProvider ( MessageConverterProvider messageConverterProvider ) {
259
+ notNull (messageConverterProvider , "messageConverterProvider must not be null" );
260
+ this .messageConverterProvider = messageConverterProvider ;
270
261
}
271
262
272
263
/** @return get Redis connection factor */
@@ -308,15 +299,16 @@ public void setRqueueMessageTemplate(RqueueMessageTemplate messageTemplate) {
308
299
* @return an object of {@link RqueueMessageListenerContainer} object
309
300
*/
310
301
public RqueueMessageListenerContainer createMessageListenerContainer () {
311
- notNull (getRqueueMessageHandler (), "rqueueMessageHandler must not be null" );
312
302
notNull (redisConnectionFactory , "redisConnectionFactory must not be null" );
303
+ notNull (messageConverterProvider , "messageConverterProvider must not be null" );
313
304
if (rqueueMessageTemplate == null ) {
314
305
rqueueMessageTemplate =
315
306
new RqueueMessageTemplateImpl (
316
307
getRedisConnectionFactory (), getReactiveRedisConnectionFactory ());
317
308
}
318
309
RqueueMessageListenerContainer messageListenerContainer =
319
- new RqueueMessageListenerContainer (getRqueueMessageHandler (), rqueueMessageTemplate );
310
+ new RqueueMessageListenerContainer (
311
+ getRqueueMessageHandler (messageConverterProvider ), rqueueMessageTemplate );
320
312
messageListenerContainer .setAutoStartup (autoStartup );
321
313
if (taskExecutor != null ) {
322
314
messageListenerContainer .setTaskExecutor (taskExecutor );
@@ -352,6 +344,9 @@ public RqueueMessageListenerContainer createMessageListenerContainer() {
352
344
if (!CollectionUtils .isEmpty (getMiddlewares ())) {
353
345
messageListenerContainer .setMiddlewares (getMiddlewares ());
354
346
}
347
+ if (messageHeaders != null ) {
348
+ messageListenerContainer .setMessageHeaders (messageHeaders );
349
+ }
355
350
return messageListenerContainer ;
356
351
}
357
352
0 commit comments