- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经实现了退避指数重试。所以基本上,如果有任何异常,我会克隆消息,然后通过添加一些延迟将其重新提交到队列。
现在我面临两个问题 - 1)我发现当我克隆并重新提交回队列时,交付计数没有增加2) 如果达到最大传递计数,我想将其移至死信。
代码:
catch (Exception ex)
{
_logger.Error(ex, $"Failed to process request {requestId}");
var clone = messageResult.Message.Clone();
clone.ScheduledEnqueueTimeUtc = DateTime.UtcNow.AddSeconds(45);
await messageResult.ResendMessage(clone);
if (retryCount == MaxAttempts)
{
//messageResult.dea
}
return new PdfResponse { Error = ex.ToString() };
}
请帮我解决这个问题
最佳答案
当您克隆一条消息时,它会成为一条新消息,这意味着系统属性不会被克隆,这会为克隆的消息提供一个从 1 开始的新传递计数。另请参阅https://docs.azure.cn/zh-cn/dotnet/api/microsoft.azure.servicebus.message.clone?view=azure-dotnet
您可以查看 Azure 服务总线的Peek Lock 功能。使用 PeekLock 时,消息在队列中变得不可见,直到您显式放弃它(将其放回队列并增加传递计数)或在处理消息时一切按预期进行时完成。另一种选择是明确地死信此消息。
但重要的是,如果您不执行上述任何操作,例如克隆 Azure 服务总线将在定义的时间间隔(LockDuration 属性)后或当您放弃消息时自动使消息再次可见。
因此,要获得延迟重试和死信行为(当达到最大传递计数时),您可以使用以下选项:
选项 1.通过 Azure 服务总线自动解锁重试
当由于某种原因无法执行消息处理时,捕获异常并确保不执行任何提到的操作(放弃、完成或死信)。这将使消息在剩余时间内不可见,并在达到配置的锁定持续时间后再次可见。正如预期的那样,Azure 服务总线的交付数量也会增加。
选项 2. 实现您自己的重试策略
在代码中执行您自己的重试策略并重试消息处理。如果已达到最大重试次数,请放弃该消息,这将使其在达到重试时间后的下一个队列读取步骤中再次可见。在这种情况下,交付数量也会增加。
注意:如果您选择选项 2.),请确保您的重试周期符合定义的 LockDuration,以便您的消息在以下情况下不会再次在队列中可见:您仍在通过重试来处理它。您还可以通过在重试之间的消息上调用 RenewLock() 方法来更新重试之间的锁定。
如果您在代码中实现重试策略,我建议您使用 Polly .Net,它已经为您提供了强大的功能,例如重试和断路器策略。请参阅https://github.com/App-vNext/Polly
关于c# - 将消息移至 azure servicebus 中的 'deadletter ',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62860726/
Microsoft 将于 2021 年 11 月停止支持服务总线的经典 API(如 here 所述) 在我们的代码中,我们使用 WindowsAzure.ServiceBus包裹。这是一个 ol 软件
我正在迁移到 Azure.Messaging.ServiceBus,并注意到现在不再有名为 Label 的属性 这是一个巨大的问题,因为我们的服务总线规则中使用标签来过滤订阅上的消息。 使用 Azur
我正在迁移到 Azure.Messaging.ServiceBus,并注意到现在不再有名为 Label 的属性 这是一个巨大的问题,因为我们的服务总线规则中使用标签来过滤订阅上的消息。 使用 Azur
我创建了一个非常简单的控制台应用程序,它连接到 Azure ServiceBus 并发送一条消息。我尝试了 Microsoft 的最新库 (Microsoft.Azure.ServiceBus),但无
我有一个使用 Microsoft.Azure.ServiceBus 的消息发布者,需要将其替换为 Azure.Messaging.ServiceBus,因为它现已弃用。 这是代码: using Mic
我(尝试)使用此代码来创建 ServiceBus 队列: using Azure.Messaging.ServiceBus; using Azure.Messaging.ServiceBus.Admi
我正在尝试更新此函数以使用 Azure.Messaging.ServiceBus 并完全删除 Microsoft.Azure.ServiceBus,但似乎找不到任何相关资源。有人知道如何使用这个包向主
我(尝试)使用此代码来创建 ServiceBus 队列: using Azure.Messaging.ServiceBus; using Azure.Messaging.ServiceBus.Admi
我正在尝试更新此函数以使用 Azure.Messaging.ServiceBus 并完全删除 Microsoft.Azure.ServiceBus,但似乎找不到任何相关资源。有人知道如何使用这个包向主
我的客户端是在框架 4.5.1 上运行的 WebForm(使用 Microsoft.ServiceBus 1_1,我的服务器是在 azure 上运行的 .netcore。 服务总线在 Azure 上运
我的客户端是在框架 4.5.1 上运行的 WebForm(使用 Microsoft.ServiceBus 1_1,我的服务器是在 azure 上运行的 .netcore。 服务总线在 Azure 上运
我已开始使用 Azure 中的 Azure 服务总线。通过互联网上的一些引用资料,人们似乎使用 Microsoft.ServiceBus.Messaging 中的 BrokeredMessage 类,
我有一段时间编写的客户端使用旧库并调用 GetBody()接收消息时读取正文。 现在我有了新客户 Microsoft.Azure.ServiceBus (发送消息)据我所知总是使用 Stream .
我有几个网站在 Azure 中运行,大量使用 ServiceBus(也在 Azure 中托管),全部位于一个区域。 有时(每 2-3 天一次)我同时在所有网站上出现相同的错误(在阅读/等待消息期间):
我知道 Rebus 完全有能力将消息从 A 点传输到 B(使用 MSMQ 作为传输层)。为了让事情完全清楚,Rebus 是否也能够进行一对多消息传递,即从 A 点发送的消息应该在 B 点和 C 点结束
在 SOA 项目中使用服务总线架构的优缺点是什么? 您会推荐哪些建议的开源服务总线平台? 提前致谢 最佳答案 我认为服务总线的优缺点与您项目中的要求有关。它可以根据需要进行调整。 您可以使用 JMS
在代码中我需要原子地: //write to a database table //publish EventA to service bus //write to another database
我对使用服务总线和其他 Azure 功能还很陌生。在 Azure 门户上手动创建服务总线后,我尝试弄清楚如何自动实现这一点。经过一段时间的阅读后,我认为使用 azure 资源管理器应该是正确的选择。仅
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我正在将 Microsoft Azure ServiceBus 用于队列消息,并使用 WCF 进行订阅。我正在尝试实现重试逻辑。我使用 Peak/Lock 查看消息,然后必须对消息进行一些本地处理。如
我是一名优秀的程序员,十分优秀!