普通消费者可以在 MassTransit 中重试消息之前延长超时时间吗?
Posted
技术标签:
【中文标题】普通消费者可以在 MassTransit 中重试消息之前延长超时时间吗?【英文标题】:Can a regular consumer extended the timeout before retrying the message in MassTransit? 【发布时间】:2022-01-12 05:45:41 【问题描述】:目前,我处于一个事件需要更新数据库中一定数量的记录的情况。通常,这不会超过几秒钟,但在某些情况下可能需要超过 1 分钟。在这种情况下,消费者会在 30 秒后获取相同的消息并重试。
我想知道是否可以在不使用 JobConsumers 的情况下为那些罕见的场景增加等待时间最多 5 分钟。
【问题讨论】:
可以参考MassTransit - Retry和UseRetry set interval with MassTransit 事情是没有失败。消费者正在处理,然后在处理 30 秒后再次发送消息 【参考方案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 分钟。看起来这成功了以上是关于普通消费者可以在 MassTransit 中重试消息之前延长超时时间吗?的主要内容,如果未能解决你的问题,请参考以下文章
是否可以使用 MassTransit 为 RabbitMQ 队列注册多个消费者?