从单个 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
我有一个 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