我们有一个SQS监听器,如:
@MessageMapping("queueName")
void listen(String message) { ... }
此队列配置有关联的死信队列的重新驱动策略。
问题在于,默认的 Spring Cloud AWS 实现在轮询消息时会删除该消息,并在内部连接 3 次重试来处理该消息,然后失败。
我可以看到有一个 SqsMessageDeletionPolicy 枚举,其中包含 ALWAYS 和 ON_SUCCESS 值等。我在任何文档中都找不到如何更改该队列的 QueueAttributes 以更改此行为。
有人知道吗?
似乎解决方案基本上是使用 SQS 特定注释而不是通用注释:
@SqsListener(value = "queueName", deletionPolicy = SqsMessageDeletionPolicy.ON_SUCCESS)
void listen(String message) { ... }
接受的答案显示了如何为单个队列配置删除策略,
如果你想设置一个被所有@SqsListener
使用的
全局删除策略,可以通过使用属性来设置:
cloud.aws.sqs.handler.default-deletion-policy=ON_SUCCESS
请使用现有配置消除这些问题
@SqsListener(value = "queueName",deletionPolicy = SqsMessageDeletionPolicy.ALWAYS) 无效听(字符串消息){...}