首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从单个SQSListener收听多个AWS

从单个SQSListener收听多个AWS
EN

Stack Overflow用户
提问于 2019-11-15 12:40:55
回答 2查看 1.9K关注 0票数 1

我有一个springboot应用程序,其中sqslistener被配置为侦听一个队列,如下所示-

代码语言:javascript
复制
@SqsListener(value="${sqs.name}", deletionPolicy=SqsMessageDeletionPolicy.NEVER)
public void listen(Request request, Acknowledgment ack) {
logger.info("Message received {}",request);
    try {
        ack.acknowledge().get();
        logger.info("Deleted message"); 
    } catch (InterruptedException | ExecutionException e) {
        logger.error("Failed to delete message from the queue");
    }
    logger.info("Message processed.");
}

但是,我必须改变这个来听两个不同的队列。首先,侦听器应该侦听第一个队列,如果没有找到消息,那么它应该侦听第二个队列。

用同一个听者做这件事有可能吗?否则,任何实现这一目标的想法都是有帮助的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-25 16:04:37

是否可以用同一个侦听器来完成这个任务?否则,任何实现这一目标的想法都是有帮助的。

不,对于两个不同的队列,不可能有相同的侦听器。

首先,侦听器应该侦听第一个队列,如果没有找到消息,那么它应该侦听第二个队列。

如果队列中没有消息,侦听器将不会接收到任何“输入”,因此不必担心这种情况。

如果不是

,实现这一点的任何想法都是有帮助的。

必须实现两个不同的侦听器才能分别侦听QueueA和QueueB

票数 -1
EN

Stack Overflow用户

发布于 2021-09-17 19:35:59

我能够通过将队列名作为数组列出,并以逗号分隔,从而实现了这一目标:

代码语言:javascript
复制
@SqsListener(value = "#{'${com.myproject.queues}'.split(',')}"
public void receiveMessage(String message, @Headers Map<String, Object> headers) {
    logger.info("Received message: {}, headers: {}", message, headers);
}

在application.properties中:

代码语言:javascript
复制
com.myproject.queues=queue-name-1,queue-name-2

参考资料:https://github.com/spring-cloud/spring-cloud-aws/issues/147

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58877290

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档