【问题标题】:Can a regular consumer extended the timeout before retrying the message in MassTransit?普通消费者可以在 MassTransit 中重试消息之前延长超时时间吗?
【发布时间】:2022-01-12 05:45:41
【问题描述】:

目前,我处于一个事件需要更新数据库中一定数量的记录的情况。通常,这不会超过几秒钟,但在某些情况下可能需要超过 1 分钟。在这种情况下,消费者会在 30 秒后获取相同的消息并重试。

我想知道是否可以在不使用 JobConsumers 的情况下为那些罕见的场景增加等待时间最多 5 分钟。

【问题讨论】:

标签: c# .net azure azureservicebus masstransit


【解决方案1】:

您是否在接收端点上配置LockTimeout 30 秒? MassTransit 默认为 5 分钟,但如果队列已具有较低的配置锁定超时,Azure 服务总线将仅在重新传递消息之前等待该时间段。如果队列已经存在,您需要使用 Azure 门户更新队列属性,或删除队列以便 MassTransit 重新创建它(任何消息都会丢失)。

您也可以将MaxDeliveryCount 设置为1,Azure 会在一次尝试后将消息移动到死信队列。不过第一种方法更好。

【讨论】:

  • 感谢您的回复。我正在尝试第一种方法:busFactoryConfig.SubscriptionEndpoint<CustomerModified>(SubscriptionName, (configurator) => { configurator.LockDuration = TimeSpan.FromMinutes(5); configurator.MaxAutoRenewDuration = TimeSpan.FromMinutes(30); configurator.ConfigureConsumer<CustomerModifiedConsumer>(context); }); 默认设置为 30 秒,我没有更改任何配置,现在订阅设置为 5 分钟。看起来这成功了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-25
  • 1970-01-01
  • 2014-02-27
相关资源
最近更新 更多