我有一个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.");
}但是,我必须改变这个来听两个不同的队列。首先,侦听器应该侦听第一个队列,如果没有找到消息,那么它应该侦听第二个队列。
用同一个听者做这件事有可能吗?否则,任何实现这一目标的想法都是有帮助的。
发布于 2020-02-25 16:04:37
是否可以用同一个侦听器来完成这个任务?否则,任何实现这一目标的想法都是有帮助的。
不,对于两个不同的队列,不可能有相同的侦听器。
首先,侦听器应该侦听第一个队列,如果没有找到消息,那么它应该侦听第二个队列。
如果队列中没有消息,侦听器将不会接收到任何“输入”,因此不必担心这种情况。
如果不是
,实现这一点的任何想法都是有帮助的。
必须实现两个不同的侦听器才能分别侦听QueueA和QueueB
发布于 2021-09-17 19:35:59
我能够通过将队列名作为数组列出,并以逗号分隔,从而实现了这一目标:
@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
https://stackoverflow.com/questions/58877290
复制相似问题