Amazon web services 来自不同AWS区域的多个SQS侦听器

Amazon web services 来自不同AWS区域的多个SQS侦听器,amazon-web-services,spring-boot,amazon-sqs,spring-jms,region,Amazon Web Services,Spring Boot,Amazon Sqs,Spring Jms,Region,我们目前正在使用单个SQS队列来处理消息。 但是,作为功能的扩展,我们需要支持具有相同队列名称的多个区域 jmsListener的当前实现绑定到给定区域中的给定SQS队列,如下所示: SQSListener.java @Component public class SQSListener { @Override @JmsListener(destination = "${QueueName}", concurrency = "${JmsThreadCount}") pu

我们目前正在使用单个SQS队列来处理消息。 但是,作为功能的扩展,我们需要支持具有相同队列名称的多个区域

jmsListener的当前实现绑定到给定区域中的给定SQS队列,如下所示:

SQSListener.java

@Component
public class SQSListener {

    @Override
    @JmsListener(destination = "${QueueName}", concurrency = "${JmsThreadCount}")
    public void onMessage(Message message) throws JMSException {

    }
@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;
    }



}
SQSConfiguration.java

@Component
public class SQSListener {

    @Override
    @JmsListener(destination = "${QueueName}", concurrency = "${JmsThreadCount}")
    public void onMessage(Message message) throws JMSException {

    }
@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;
    }



}
应用程序属性

QueueName=xyz
JmsThreadCount=1-5
Regions=us-east-1, us-west-2 #*(newly added region)*

如何使其通用化以按配置中指定的区域创建多个侦听器类实现?

尽管没有直接的方法使用spring framework的注释来创建侦听器以侦听多个AWS区域中的多个队列(多个AWS区域中的同一队列名称),我能够通过编程配置每个区域的JMS容器工厂bean、每个区域的JMS模板和每个区域的JMS侦听器来解决上述问题


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

您可以收听来自不同地区的SQS。如果您提供的不是队列名称,而是SQS的完整https url。我已经在我的应用程序中应用了这一点,它起了作用

例如SQS http URL-


没有直接的方法可以使用Spring注释配置多个区域SQS侦听器,因此要弄清楚是否可以通过编程方式创建多个特定于区域的JmsContainerFactory bean,并以编程方式配置各自的JmsListener类。我的问题是,您是否可以配置为在多个配置为“regions:us-east-1、us-west-2、eu-west-1”的区域中使用相同的队列名称,明天这些受支持的区域列表可能会扩展。默认情况下不支持。如果地区是us-west-2,你可以根据地区更改url。如果地区是us-east-1,url将是“Hey@Amit Kaneria,你能发布示例代码吗?我想为我的用例做一些类似的事情。谢谢。