我正在尝试实例化多个SimpleMessageListenerContainer
并为独立的TaskExecutor
队列定义自定义MessageListener
,这个设置的原因是我不想创建共享SimpleMessageListenerContainer
1}}其中线程池配置在所有Message Listener队列中共享。
你能提出一个建议吗?我尝试了一些spring-messaging-aws测试用例方法,但似乎没有工作?
@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;
}
答案 0 :(得分:0)
我找不到比使用 Scheduler 创建服务更好的解决方案了。
@Component
public class AmazonService {
@Scheduled("0 */5 * * * *")
public void checkSqs() {
// Check sqs
}
}
SQS 将通过惰性机制或通过服务中的构造函数进行实例化。