从单个 SQSListener 监听多个 AWS SQS

Listen to multiple AWS SQS from single SQSListener

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

@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.");
}

但是,我必须更改它以收听 2 个不同的队列。首先,监听器应该监听第一个队列,如果没有找到消息,那么它应该监听第二个队列。

是否可以用同一个听众来做? 如果没有,任何实现此目的的想法都会有所帮助。

Is it possible to do it with the same listener ? If not, any idea to achieve this is helpful.

不,不可能为 2 个不同的队列设置相同的侦听器。

First, listener should listen to first queue, if no messages found then it should listen to second queue.

如果队列中没有消息,正在侦听该队列的侦听器将不会收到任何消息"input",因此您不必担心这种情况。

If not, any idea to achieve this is helpful

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

我能够通过将队列名称列为数组并用逗号分隔来实现此目的:

@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中:

com.myproject.queues=queue-name-1,queue-name-2

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