簡體   English   中英

來自不同 AWS 區域的多個 SQS 偵聽器

[英]Multiple SQS Listeners from different AWS regions

我們目前使用單個 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;
    }



}

應用程序屬性

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

如何通過配置中指定的區域使創建多個偵聽器類實現變得通用?

雖然沒有直接的方法使用 spring 框架的注釋來創建偵聽器來偵聽多個 AWS 區域中的多個隊列(多個 AWS 區域中的相同隊列名稱),但我能夠通過為每個區域的 JMS 容器工廠 bean 進行編程配置來解決上述問題,每個區域的 JMS 模板,以及每個區域的 JMS 偵聽器。

我將在接下來的幾天發布示例代碼,這可能對社區有用。

您可以收聽來自不同地區的 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) {}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM