首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >暂停spring SqsListener从队列中提取消息

暂停spring SqsListener从队列中提取消息
EN

Stack Overflow用户
提问于 2022-03-21 01:38:02
回答 1查看 530关注 0票数 1

目前,我有一个SQS队列,在5次重试后将消息移动到DLQ,我使用spring SqsListener读取队列:

代码语言:javascript
复制
@SqsListener(
    value = ["\${messaging.queue.orders}"],
    deletionPolicy = SqsMessageDeletionPolicy.ON_SUCCESS
)
fun handleOrders(message: String) {
    // process order
}

现在,我试图使用一个功能切换来暂停侦听器,但是我找不到一种方法,我尝试手动使用Acknowledgment,但是如果我不发送成功的ack事件,则消息移动到DLQ:

代码语言:javascript
复制
@SqsListener(
    value = ["\${messaging.queue.orders}"],
    deletionPolicy = SqsMessageDeletionPolicy.NEVER
)
fun handleOrders(message: String, ack: Acknowledgment) {
    if(toggle.orders.enabled) {
        // process order
        ack.acknowledge()
    }
    // else don not process or ack the message
}

正如我所说的,上面的解决方案的问题是,如果我不执行ack.acknowledge(),消息在第五次之后被移动到DLQ,所以如果禁用切换,我需要暂停/停止SqsListener来从队列中提取消息,如果再次启用它,则启动/恢复。

EN

回答 1

Stack Overflow用户

发布于 2022-03-21 08:57:29

您可以使用SqsListener切换@ConditionalOnExpression的创建

比如:

代码语言:javascript
复制
@SqsListener(
    value = ["\${messaging.queue.orders}"],
    deletionPolicy = SqsMessageDeletionPolicy.NEVER
)
@ConditionalOnExpression("\${toggle.orders.enabled:false}")
fun handleOrders(message: String) {
    // process order
}

并在application.yaml中添加以下内容

代码语言:javascript
复制
toggle:
  orders:
    enabled: true

如果更改该属性,则除非使用spring进行配置,否则必须重新启动服务器。

您也可以使用@ConditionalOnProperty(prefix = "toggle", name = "orders.enabled")

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

https://stackoverflow.com/questions/71551988

复制
相关文章

相似问题

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