ServiceBus RetryExponential 属性含义

2024-04-18

我很难理解与 QueueClients 结合使用的 RetryExponential 类(我也假设 SubscriptionClients )。

属性已列出here http://msdn.microsoft.com/en-us/library/windowsazure/microsoft.servicebus.retryexponential_properties.aspx,但我认为我对他们的描述的解释是不正确的。

这是我的解释...

    var minBackoff = TimeSpan.FromMinutes(5);  // wait 5 minutes for the first attempt?
    var maxBackoff = TimeSpan.FromMinutes(15);  // all attempts must be done within 15 mins?
    var deltaBackoff = TimeSpan.FromSeconds(30); // the time between each attempt?
    var terminationTimeBuffer = TimeSpan.FromSeconds(90); // the length of time each attempt is permitted to take?
    var retryPolicy = new RetryExponential(minBackoff, maxBackoff, deltaBackoff, terminationTimeBuffer, 10);

我的辅助角色在过去一小时内只尝试处理队列中的消息两次,尽管我认为根据上面的配置,它应该更频繁地处理(每 30 秒 + 之前尝试期间使用的处理时间,最多 90秒)。我假设这些设置会强制每 2 分钟重试一次。然而,我根本不明白这种解释是如何指数的。

我对每个属性的解释(在上面的评论中)是否正确?如果不是(我认为它们不正确),每个属性的含义是什么?


正如您所怀疑的,您包含的值对于这些参数的含义没有意义。以下是我对参数的理解:

  • DeltaBackoff - 用于以指数方式增加重试间隔的间隔。
  • MaximumBackoff - 您希望重试之间的最大次数。
  • MaxRetryCount - 系统重试操作的最长时间。
  • MinimalBackoff - 您希望两次重试之间的最短时间。
  • TerminationTimeBuffer - 系统在放弃之前重试操作的最长时间。

它始终会重试最多 maxRetryCount(在您的情况下为 10),除非首先达到终止时间缓冲区限制。

它也不会尝试大于终止时间缓冲区(在您的情况下为 90 秒)的时间,无论它尚未达到最大重试计数。

minBackoff 是您在重试之间等待的最短时间,maxBackoff 是您在重试之间等待的最长时间。

DeltaBackOff 值是每次重试内部将按指数增长的值。请注意,这不是一个准确的时间。它随机选择一个比该时间稍短或稍长的时间,以便所有重试的多个线程不会在完全相同的时间执行此操作。它的随机性有点让人错愕。在第一次实际尝试和第一次重试之间仅存在 minBackOff 间隔。由于您将 deltaBackOff 设置为 30 秒,因此如果进行第二次重试,则大约需要 30 秒加上 minBackOff。第三次重试将是 90 秒加上 minBackOff,每次重试依此类推,直到达到最大退避值。

我要确保指出的一件事是,这是一个重试策略,这意味着如果某个操作收到异常,它将遵循此策略再次尝试。如果检索、死信、延迟等操作失败,则将启动此重试策略。这些是针对服务总线的操作,而不是您自己的处理中的异常。

我在这一点上可能是错误的,但我的理解是,这并不直接与实际接收要处理的消息相关,除非对接收的调用失败。连续处理是通过 Receive 方法和您自己的代码循环或通过使用 OnMessage 操作(在幕后也使用 Receive)来处理的。只要实际尝试接收时没有出现错误,则不会应用此重试策略。调用接收之间使用的时间间隔可以通过您自己使用需要一定时间跨度的 Receive 方法来设置,也可以通过在创建queueClient 对象之前设置MessagingFactory.OperationTimeout 来设置。如果由于您使用了在 Receive 上提供时间跨度的重载或达到了默认时间跨度而导致接收调用达到等待限制,则只会返回 Null。这不被视为例外,因此重试策略不会生效。

可悲的是,我认为您必须为实际处理编写自己的指数回退代码。不过,有很多例子。

是的,您可以在 QueueClient 和 SubscriptionClient 上设置此重试策略。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ServiceBus RetryExponential 属性含义 的相关文章

随机推荐

  • AVAudioSinkNode 具有非默认但仍然是设备本机采样率

    我已经配置了AVAudioSinkNode附于AVAudioEngine s inputNode像这样 let sinkNode AVAudioSinkNode timestamp frames audioBufferList gt OSS
  • Matplotlib 补丁有漏洞

    以下代码有效 问题是我不知道它为什么有效 该代码绘制一个圆形面片 使用 PathPatch 并从中心切出一个三角形 我的猜测是 内三角形被切掉 因为它是顺时针绘制的 而外圆是逆时针绘制的 如果方向不反转 三角形就不会被剪切 我在文档中没有找
  • 更改所有 Woocommerce 电子邮件通知中的“回复”电子邮件地址

    在 Woocommerce 中 我想更改应始终用作的电子邮件地址回复地址对于所有电子邮件通知 Woocommerce 如何做到这一点 以下操作将更改所有电子邮件通知中的 回复 电子邮件地址 和姓名 add filter woocommerc
  • kendo-numerictextbox' 不是已知元素

    我在尝试在 Angular 7 应用程序中实现 kendo numerictextbox 时遇到错误 我目前正在使用 kendo dropdownlist 和文本框控件 没有任何问题 我不确定缺少哪个包 我是否缺少一些依赖
  • 如何获取接受的入站套接字的 IP 地址?

    我的问题是 服务器将创建一个套接字 绑定到给定端口并使用地址 INADDR ANY 监听 和接受 新连接 然后 我们可以获取客户端的ip地址 来自接受 现在 我想知道服务器的IP地址 因为服务器的主机有 上面有多个网卡 如何知道接受的入站套
  • 使用 mongoose 和 Fixie(Heroku 附加组件)连接到 mongodb

    我有一个托管在 Atlas MongoDB Cloud 集群上的 mongodb 数据库 我目前正在使用 mongoose 访问 Node js 应用程序中的数据库 mongoose connect mongodb user pw clus
  • R:格式化xtable中的数字

    我有数据 transaction lt c 1 2 3 date lt c 2010 01 31 2010 02 28 2010 03 31 type lt c debit debit credit amount lt c 500 1000
  • QML 不显示 svg 图像

    我编写了一个简单的 QML ui 它使用一些 svg 图像 当我在桌面上执行该应用程序时 一切都很好 显示了 UI 以及上面的 svg 图像 当我尝试在嵌入式设备 运行嵌入式 Windows 上执行应用程序时 会出现问题 在这种情况下 会显
  • IMemoryCache 保证唯一的新密钥 .NET-Core

    我正在尝试使用Microsoft Extensions Caching Memory IMemoryCache接口 类 我需要向缓存添加一个新项目 并确保不会覆盖已保存的任何其他内容 目前 所有密钥都是自动生成和随机的 不是顺序的 如何针对
  • 获取 PostgreSQL 中两个日期之间的结果

    我有下表 id user id start date end date integer integer date date Fields start date and end date持有日期值 例如YYYY MM DD 该表中的条目可能如
  • 标准吉他歌词/和弦包围的正则表达式

    我正在尝试在为吉他 歌词格式化的标准文本文档中的和弦周围添加方括号 以使它们与 OnSong 应用程序更兼容 我有规则 但不明白如何匹配所有可能的组合 规则是 和弦将以单个大写 A G 开头 如果大写 A G 后跟空格 换行符 b m su
  • java中的绿色线程和本机线程[重复]

    这个问题在这里已经有答案了 绿色线程和本机线程有什么区别 为什么叫绿色 本土呢 我是编程世界的新手 我喜欢学习java 在浏览 java 线程面试问题时 我发现了这一点 我听说过线程 但没有听说过这些绿色和原生的 我仔细研究了绿色线程和本机
  • stripe 登录 zsh:未找到命令:stripe

    我正在跟进条纹文档 https stripe com docs stripe cli install当我去stripe login在步骤 2 中 我收到以下错误 zsh 找不到命令 条带 我已经执行了步骤 1 安装 stripe CLI 为
  • WPF:如何让单选按钮显示为水平行的切换按钮

    我目前正在构建一个将在触摸面板中使用的用户界面 因此 我想将任何单选按钮组显示为切换按钮的水平行 我已经弄清楚如何显示 ToggleButtons 而不是标准项目符号项目
  • 禁用缓存 YouTube 视频

    当 YouTube 使 YouTube 视频与缓存一起使用时 YouTube 取得了相当大的成就 然而 这导致我的 ajax 网站出现问题 我想知道是否有办法禁用 YouTube 视频的缓存 特别是在 Internet Explorer 中
  • 解码 PKCS#12 文件

    我正在寻找在 NET 中解码 PKCS 12 文件的方法 我需要提取私钥和任何证书 以便我可以以编程方式访问以下内容 modulus 公共指数 私人指数 prime1 prime2 指数1 指数2 系数 我需要此信息 以便我可以成功使用 P
  • 从 Facelets 错误页面引用 CDI 托管 bean

    我很难尝试让通用错误页面在使用 JSF 2 Facelets 和 CDI 的 非常简单的 WAR 项目中工作 我的应用程序服务器是 WebLogic 12c 它应该支持所有这些开箱即用的功能 但它无法显示错误页面 当我将完全相同的 WAR
  • 监控 AppFabric 缓存

    我在 3 台服务器 AppFabric 1 1 上设置了高度可用的 AppFabric 缓存 我想监视每台服务器上的本地缓存 如果它因任何原因而关闭 则将其启动备份 Problem 问题是权限 我编写了一个 Powershell 脚本来执行
  • 从 php 中的日期时间获取年/月/日?

    I used date w timestamp and date w timestamp 要知道这一天 date n timestamp 几个月等 现在我正在使用日期时间 我想知道从日期时间获取一天 一个月等的等效函数是什么 PS 我知道我
  • ServiceBus RetryExponential 属性含义

    我很难理解与 QueueClients 结合使用的 RetryExponential 类 我也假设 SubscriptionClients 属性已列出here http msdn microsoft com en us library wi