【问题标题】:How could I add a delay in processing failed messages in ServiceStack Redis MQ如何在 ServiceStack Redis MQ 中添加处理失败消息的延迟
【发布时间】:2015-05-26 16:19:37
【问题描述】:

有没有一种简单的方法可以让 Servicestack 在重试失败的 MQ 项目之前等待 x 秒(使用 Redis MQ)。目前它只是连续尝试 3 次,没有延迟。

【问题讨论】:

    标签: servicestack servicestack.redis redismqserver


    【解决方案1】:

    当您注册一个 MQ 处理程序时,您还可以注册一个错误处理程序,该处理程序在发布失败消息后被调用,您可以使用它来添加自定义延迟,例如:

    mqServer.RegisterHandler<MyRequest>(
        ServiceController.ExecuteMessage,
        (msgHandler, msg, ex) => Thread.Sleep(1000));
    

    【讨论】:

    • 我很清楚。错误处理程序在消息被重试/重新发布到队列之前完成执行?
    • @richardwhatever 在错误响应发布后触发,但可用于在执行下一条消息之前延迟该工作处理程序线程。
    • @mythz 您使用 Thread.Sleep 提供的解决方案可以工作,但这并不持久(即在 1 秒等待期间系统故障的情况下)。无论如何不使用 Thread.Sleep 并将失败的 msg 退回到 redis 队列并稍后以某种方式处理此 msg(即直到 2 秒后才出队)。也许 ZRANGE 可以提供帮助?
    • @mythz 实际上,也许我需要使用 DLQ 来处理适当的延迟重试。而不是依靠SS为我处理。但是 NServiceBus 确实包含它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-28
    • 1970-01-01
    • 2017-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多