【问题标题】:Multiple SQS Listeners from different AWS regions来自不同 AWS 区域的多个 SQS 侦听器
【发布时间】: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


【解决方案1】:

虽然没有直接的方法使用 spring 框架的注释来创建侦听器来侦听多个 AWS 区域中的多个队列(多个 AWS 区域中的相同队列名称),但我能够通过 JMS Container Factory bean 的编程配置来解决上述问题每个区域的 JMS 模板,每个区域的 JMS 侦听器。

我将在接下来的几天发布示例代码,这可能对社区有用。

【讨论】:

  • 嘿@Amit Kaneria,你能发布示例代码吗,我想为我的用例做类似的事情。谢谢。
【解决方案2】:

您可以收听来自不同地区的 SQS。如果您提供的不是队列名称而是 SQS 的完整 https url。我已经在我的应用程序中应用了它并且它有效

例如 SQS http URL - https://sqs.us-west-2.amazonaws.com/YOURACCOUNTNUMBER/YOURQUEUENAME

@SqsListener(value = "https://sqs.us-west-2.amazonaws.com/123456789/MYQUEUENAME
", deletionPolicy = SqsMessageDeletionPolicy.ON_SUCCESS)
protected void queueListener(String dataFomSQS, @Header("Acknowledgment") Acknowledgment acknowledgment) {}

【讨论】:

最近更新 更多