【发布时间】:2026-01-05 23:20:05
【问题描述】:
我们目前正在使用单个 SQS 队列来处理消息。 但是作为功能的扩展,我们需要支持具有相同队列名称的多个区域。
jmsListener 的当前实现与给定区域中的给定 SQS 队列绑定,如下所示:
SQSListener.java
@Component
public class SQSListener {
@Override
@JmsListener(destination = "${QueueName}", concurrency = "${JmsThreadCount}")
public void onMessage(Message message) throws JMSException {
}
SQSConfiguration.java
@Component
@EnableJms
public class SQSConfig {
@Bean
public DefaultJmsListenerContainerFactory jmsListenerContainerFactory() {
DefaultJmsListenerContainerFactory factory = null;
try {
factory = new DefaultJmsListenerContainerFactory();
factory.setConnectionFactory(getSqsConnectionFactory()); //passes credentials in local method call
factory.setDestinationResolver(new DynamicDestinationResolver());
factory.setSessionAcknowledgeMode(Session.CLIENT_ACKNOWLEDGE);
} catch (Exception e) {
logger.error(e.getLocalizedMessage());
}
return factory;
}
}
Application.properties
QueueName=xyz
JmsThreadCount=1-5
Regions=us-east-1, us-west-2 #*(newly added region)*
如何使按配置中指定的区域创建多个侦听器类实现的通用性?
【问题讨论】:
-
没有直接的方法来使用 Spring 注释配置多个区域 SQS 侦听器,因此确定我是否可以以编程方式创建多个特定于区域的 JmsContainerFactory bean,并以编程方式配置相应的 JmsListener 类。
标签: amazon-web-services spring-boot amazon-sqs spring-jms region