【问题标题】:Request/Response pattern: Stop consumer to reprocess message on application restart请求/响应模式:停止消费者在应用程序重新启动时重新处理消息
【发布时间】:2021-11-18 13:40:11
【问题描述】:

我正在使用 Masstransit 请求/响应模式。所以我有一个请求者应用程序和一个消费者应用程序,它们运行得非常好。我没有配置任何重试/重新传递,就好像消费者发生了任何错误一样,请求者将处理它或者可能会发送另一个请求。到目前为止一切顺利。

但是如果消费者应用程序在进程中间崩溃并重新启动,消费者会尝试从队列中获取消息并开始重新处理它,这不适用于我的情况。因为当消费者应用程序崩溃时,请求者会得到错误响应(或超时)。我知道 MassTransit 中的 MessageRetry 完全在内存中。

我的问题是,我们能否以某种方式阻止消费者在应用程序重启时重新处理消息?或者我们需要从服务总线队列中删除待处理的消息?

【问题讨论】:

    标签: masstransit


    【解决方案1】:

    请求客户端发送的消息与请求客户端之间没有连接。使用请求超时作为默认值,MassTransit 将消息的TimeToLive 设置为相同的值。一旦 TimeToLive 过期,传输应该删除该消息。

    如果消费者应用程序在使用消息时崩溃,则该消息将保留在队列中。如果该消息反复导致您的应用程序崩溃,您可以检查ReceiveContext 上的Redelivered 属性(ConsumeContext 上的一个属性),如果您认为该消息导致进程崩溃,则可能以另一种方式处理该消息崩溃。

    当然,真正的解决方案是修复消费者,使其不会导致进程崩溃...

    更新

    如果您希望 Azure 服务总线在消费进程崩溃时将消息移动到死信队列,则可以使用 DeliveryCount1 配置接收端点。

    【讨论】:

    • 嗨,克里斯,感谢您的回复。正如我从您的回复中了解到的那样,如果我按照此处 (stackoverflow.com/questions/67201228/…) 的描述设置 TimeToLive 属性,那么该消息将在 TimeToLive 之后被删除。这意味着,即使重新启动消费者应用程序,该消息也永远不会重新出现。是正确的理解吗?请确认。
    • 只有在 TimeToLive 过期后消息才会消失。
    • 嗨@chris,我想在请求/响应模式中通知一些与 TimeToLive 和 DeliveryCount 有关的事情:如果我像下面这样配置总线控制,队列仍然有“默认消息时间到Live”是 366 天,消息 TimeToLive 是 30 秒。消息 TimeToLive 只能在我在 CreateRequestClient 期间配置但消息仍然没有移动到 DLQ 时才能更改。请注意:邮件中的 DeliveryCount 默认为 1。 _busControl = Bus.Factory.CreateUsingAzureServiceBus(conf => { conf.DefaultMessageTimeToLive = TimeSpan.FromSeconds(9); })
    • DefaultMessageTimeToLive 的配置仅适用于总线端点,不适用于您的接收端点。
    • 嗨@chris,好的,那么Masstransit 中的实际总线端点是什么?我知道如何配置 ReceiveEndpoint 并在消费者中配置它。而且我还配置了请求者,如下所示: var servicebusConnectionstring = ConfigurationManager.ConnectionStrings["MYAPiBus"].ConnectionString; _busControl = Bus.Factory.CreateUsingAzureServiceBus(conf => { conf.Host(servicebusConnectionstring); conf.DefaultMessageTimeToLive = TimeSpan.FromSeconds(9); });等待_busControl.StartAsync()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-12
    • 2017-07-31
    • 2019-12-06
    相关资源
    最近更新 更多