Azure 服务总线是否可能创建了该消息的副本?

2024-05-20

我们在 Azure 服务总线上遇到了一些奇怪的行为,除了 Azure 中的一些错误之外,我们无法弄清楚如何解释。这就是发生的事情:

  1. 我们已向 Azure 服务总线发送过一次消息
  2. 发送消息的调用执行时间略长于一分钟,但仍然成功,并且此后消息收到良好
  3. 出现了重复的消息EnqueuedTimeUtc大约半秒后SequenceNumber与第一条消息不同,但内容相同并且MessageId我们生成的

现在我们相当确定我们只打过一次电话SendMessage因为我们在此之前记录了所有收到的消息。

我们也不认为这是客户端库执行此操作,因为在总线上出现的这两条消息之间还发送了其他消息,并且我不认为客户端库在允许其他消息通过的同时在后台执行此操作。但并不能 100% 确定这一点。这是我们发现发生的事情:

  1. 第一条消息已发送
  2. 完成操作大约需要 63 秒
  3. 之后发送一些其他消息
  4. 第一条消息发送后大约 30 秒,会出现一条重复消息(至少根据 EnqueuedTime)。

所以问题是:有人经历过类似的事情吗?这可能是 Azure 本身的错误/时间问题吗?他们有任何保证不会发生这种情况吗?由于通话时间超过一分钟,我怀疑当时 Azure 中发生了某些事情,可能导致了这种情况(例如更新或类似的事情)


这种情况可能会发生,而且是“正常”的。服务总线 SDK 具有内部自动重试策略来克服暂时性错误。因此,如果第一次尝试成功,但由于网络问题导致响应丢失,它将重试并有效地传递消息两次。

客户端或网络级别可能会提前发生错误,并且已发送的消息可能会被提交到队列中,但确认未成功返回给客户端。这种情况使客户端对发送操作的结果产生疑问。

要解决此问题,您可以启用重复检测 https://learn.microsoft.com/en-us/azure/service-bus-messaging/duplicate-detection有一定的间隔。这将防止在该时间间隔内发送重复的消息 ID。

有一个缺点:

请注意,启用重复检测和窗口大小会直接影响队列(和主题)吞吐量,因为所有记录的消息 ID 必须与新提交的消息标识符相匹配。

理想情况下,您将拥有幂等接收器,这意味着它已准备好进行重复。但这并不总是可行/方便。

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

Azure 服务总线是否可能创建了该消息的副本? 的相关文章

随机推荐

  • Presto/Trino - where 子句中的静态日期和时间戳

    我非常确定以下查询在 Presto 上对我有用 select segment sum count from modeling trends where segment 2557172 and date 2016 06 23 and coun
  • 使用 Parceler 与 Kotlin 数据类和构造函数进行序列化

    有没有办法使用Parceler https github com johncarl81 parceler使用 Kotlin 数据类和构造函数进行序列化 无需使用 ParcelProperty每个字段的注释 如果我尝试使用这样的库 Parce
  • gulp-sass 5 没有默认的 Sass 编译器;请自行设置

    插件 gulp sass 错误 信息 gulp sass 5 没有默认的 Sass 编译器 请自行设定 这俩sass and node sass包裹是允许的 例如 在你的 gulpfile 中 var sass require gulp s
  • 除非我在项目目录中,否则 Git 不会显示日志

    我正在尝试打电话git log当我在不同的目录中时 我经过的位置 git is git log Users Leica proj1 但它说 不是 git repo 如果我cd进入这个目录 就可以正常工作了 cd Users Leica Pr
  • 参数无效--model_config_file_poll_wait_seconds

    我正在尝试使用以下两个选项启动tensorflow serving 如文档中所示 docker run t rm p 8501 8501 v pwd models models tensorflow serving model config
  • 在 HTML5 中创建可拖动和可缩放的网格

    与其他 HTML5 不同如何创建网格问题 我想知道如何制作一个可拖动且可扩展的 绘制网格非常简单 var c document getElementById canvas var ctx c getContext 2d var width
  • MySQL InnoDB 约束不起作用

    我偶然发现 innoDB 约束的奇怪行为 但找不到原因 我有包含数据的表格 下面列出了它们的结构 CREATE TABLE contents id int 10 unsigned NOT NULL AUTO INCREMENT title
  • 使用 jQuery 清除 IMG

    我正在尝试从 a 中删除加载的图像 img 元素 但清除或删除 src 不会执行此操作 该怎么办 HTML img src https www google com images srpr logo3w png JQUERY img att
  • 仅从日期计算夏令时

    我正在使用 Arduino 和实时时钟芯片 该芯片补偿了闰年等 因此它始终具有正确的日期 但我认为由于区域复杂性 它不处理夏令时 时钟可以给出日 月 年 从 1 开始 以及星期几 星期日 0 到星期六 6 因为我需要与用户输入的日期和时间进
  • pg_restore错误:角色XXX不存在

    尝试将数据库从一个系统复制到另一个系统 涉及的版本是9 5 0 源 和9 5 2 目标 源数据库名称是foodb与主人pgdba并且目标数据库名称将被命名foodb dev与主人pgdev 所有命令都在将托管副本的目标系统上运行 The p
  • 在 Flash Player 10 中打开 pdf

    我需要在 Flash Player 10 中打开 PDF 该 swf 不会在浏览器中运行 并且系统上不会有 adobe reader 程序 我需要知道是否可以在 Flash 播放器中打开 PDF 而无需以任何方式进行转换 我在谷歌上搜索了无
  • 如何在c#中创建延迟启动应用程序?

    我正在使用 WPF C net 创建一些桌面应用程序 我想将其创建为计算机启动应用程序 我可以将快捷方式链接添加到启动文件夹 我的问题是 我想在计算机启动一分钟后启动此应用程序 如何执行此操作 如果您确实想知道互联网连接是否可用 也许最好检
  • Android Studio 3.0.0 不允许 DOCTYPE

    升级到Android Studio 3 0 0 同步并更新gradle插件 出现以下错误 Error DOCTYPE not allowed if function http apache org xml features disallow
  • 如何将今天的日期返回到 Oracle 中的变量

    我想做这个 DECLARE today as smalldatetime SELECT today GetDate 但我需要一个oracle翻译 甲骨文使用SYSDATE 还有 ANSI 标准CURRENT TIMESTAMP 除其他外 S
  • 在 Angular 中使用 Vue 组件

    我有一个用 Vue 构建的项目 我想在 Angular 应用程序中重用 Vue 应用程序中的组件 这样我就不必从头开始重建每个组件 我在medium上看到了这个教程 如何在 Angular 应用程序中使用 Vue 2 0 组件 https
  • docker容器大小远大于实际大小

    我正在尝试从中构建图像debian latest 构建后 报告的图像虚拟大小来自docker images命令为 1 917 GB 我登录查看尺寸 du sh 大小为 573 MB 我很确定这么大的尺寸通常是不可能的 这里发生了什么 如何获
  • CakePHP 查找 - 按字符串到整数排序?

    我想使用 CakePHP 从数据库中提取照片数组 按照片标题排序 0 1 2 3 我的查询当前看起来像 ss photos this gt Asset gt find all array conditions gt array kind g
  • 阻止搜索引擎抓取目录

    我的网站有这样的 URL 最长 结构 http www example com xyz pqr abcd efgh 123 html http www example com xyz pqr abcd efgh 123 html 因此最多有
  • 禁用内容安全策略

    当我开发网站时 我经常想看看特定功能在网站上的外观如何 所以我会使用 chrome 开发者工具并经常运行一些 javascript 脚本 我经常发现一些脚本由于内容安全策略 CSP 而无法运行的问题 我完全理解该策略是为了防止跨站点脚本攻击
  • Azure 服务总线是否可能创建了该消息的副本?

    我们在 Azure 服务总线上遇到了一些奇怪的行为 除了 Azure 中的一些错误之外 我们无法弄清楚如何解释 这就是发生的事情 我们已向 Azure 服务总线发送过一次消息 发送消息的调用执行时间略长于一分钟 但仍然成功 并且此后消息收到