[英]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.