Pub/Sub - 无法提取未送达的消息

时间:2021-07-20 15:55:52

标签: google-cloud-platform gcloud google-cloud-pubsub

我公司的 Pub/Sub 存在问题。我们的一些消息被卡住了,并且最旧的未确认消息的年龄随着时间的推移而增加。

1 日图表:

enter image description here enter image description here

当我转到指标浏览器并选择过期确认截止日期时,这是一周图表。

enter image description here

我决定找出这些消息卡住的原因,但是当我运行 pull 命令(如下)时,我得到了 Listed 0 items 响应。因此无法看到它们。

有没有办法弄清楚为什么有些消息显示为未确认?

此外,未确认消息计数显示了整个月的相同数量(大约 2k)条消息,即使每天都有新消息发布。

以下是我们用于此订阅的参数: enter image description here

我试图通过将截止时间设置为 600 秒来修复此错误,但没有帮助。

另外,我想提一下,我们使用 node.js Pub/Sub 客户端库来处理消息。

1 个答案:

答案 0 :(得分:0)

无法拉取消息的最常见原因是:

  1. 订阅者客户端已经收到消息并“忘记”了它们,这可能是由于抛出了异常而未处理。在这种情况下,消息将继续被客户端租用,直到截止日期过去。客户端库都会自动延长租期,直到达到 maxExtension 时间。如果这些消息总是被遗忘,那么它们可能会被重新传递给订阅者并再次被遗忘,从而导致无法通过 gcloud 命令行工具或 UI 提取它们。
  2. 可能存在流氓订阅者。可能是另一个订阅者正在某处运行相同的订阅并“窃取”这些消息。有时,这可能是一项测试工作,也可能是早期用来查看订阅是否按预期工作且未被拒绝的工作。
  3. 您可能会遇到 large backlog of small messages 的情况。这应该会在更新版本的客户端库中修复(Node 客户端的 v2.3.0 已修复)。
  4. gcloud pubsub subscription pull 命令和 UI 不能保证返回消息,即使有一些可供拉取。有时,快速连续多次重新运行命令有助于拉取消息。

您看到过期的确认期限可能指向 1、2 或 3,因此值得检查这些内容。否则,您应该open a support case,以便工程师可以更具体地查看积压工作并确定消息的位置。

相关问题