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

Map*_*SVK 6 google-cloud-platform gcloud google-cloud-pubsub

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

1日图表:

在此输入图像描述 在此输入图像描述

当我进入指标资源管理器并选择过期确认截止日期计数时,这是一周图表。

在此输入图像描述

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

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

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

以下是我们用于此订阅的参数: 在此输入图像描述

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

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

Kam*_*osn 3

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

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

事实上,您看到过期的 ack 截止日期可能指向 1、2 或 3,因此值得检查这些内容。否则,您应该打开一个支持案例,以便工程师可以更具体地查看待办事项并确定消息的位置。