I am trying to instantiate multiple SimpleMessageListenerContainer
and define custom TaskExecutor
for independent MessageListener
queues, The reason for this setup is I don't want to create a shared SimpleMessageListenerContainer
where thread pool configuration is shared across all Message Listener queues.
Can you please provide a suggestion? I tried following some of the spring-messaging-aws test case approach but doesn't seem to be working?
@Bean
public SimpleMessageListenerContainerFactory simpleMessageListenerContainerFactory() {
SimpleMessageListenerContainerFactory msgListenerContainerFactory = new SimpleMessageListenerContainerFactory();
msgListenerContainerFactory.setAmazonSqs(amazonSQSClient());
return msgListenerContainerFactory;
}
@Bean
public SimpleMessageListenerContainer uplinkMessageListenerContainer() throws Exception {
SimpleMessageListenerContainer msgListenerContainer = simpleMessageListenerContainerFactory().createSimpleMessageListenerContainer();
msgListenerContainer.setAmazonSqs(amazonSQSClient());
QueueMessageHandler messageHandler = new QueueMessageHandler();
msgListenerContainer.setMessageHandler(messageHandler);
StaticApplicationContext applicationContext = new StaticApplicationContext();
applicationContext.registerSingleton("uplinkMessageListener", UplinkMessageListener.class);
messageHandler.setApplicationContext(applicationContext);
msgListenerContainer.setBeanName("testContainerName");
messageHandler.afterPropertiesSet();
msgListenerContainer.setMaxNumberOfMessages(maxNumberOfmessages);
msgListenerContainer.setWaitTimeOut(waitTimeout);
msgListenerContainer.setBackOffTime(backOfTime);
msgListenerContainer.setAutoStartup(sqsAutoStartup);
msgListenerContainer.setVisibilityTimeout(visibilityTimeout);
msgListenerContainer.setTaskExecutor(createDefaultTaskExecutor("MPSQSUplinkMessageListener", 2, 10));
msgListenerContainer.afterPropertiesSet();
msgListenerContainer.start();
return msgListenerContainer;
}