![](/img/trans.png)
[英]How does an unacknowledged message gets stored in GCloud pubsub subscription?
[英]How to list/view messages on subscription in Gcloud pubsub?
我可以按如下方式确认订阅中的所有消息:
gcloud pubsub subscriptions pull --auto-ack --limit=999 my-sub
(尽管在确认所有消息之前我经常必须重复运行它)。
但是,我不想确认它们,我只想查看所有未确认的消息(或者只是计算有多少未确认的消息也会有帮助)。
我以为可能是:
gcloud pubsub subscriptions pull --limit=1 my-sub
但是当我运行这个命令时,它每次都会显示不同的消息。
我这样做是希望我可以运行:
gcloud pubsub subscriptions pull --limit=999 my-sub
查看所有未确认的消息。
您可以使用gcloud pubsub subscriptions pull
来获取订阅消息。 如果您不传入--auto-ack
,那么在您拨打电话时应该会显示一些消息。 在 ack 截止日期过去之前,这些消息可能不会在后续请求中返回,因为它们在返回到gcloud
命令时将被视为未完成。 这就是为什么每次使用--limit=1
调用时都会看到不同消息的原因。
此外,设置pull
调用的限制并不能保证所有消息都将在单个响应中返回,只能返回不超过可能的消息。 如果要查看所有消息,则必须重复运行该命令,但不一定能够以确定的方式查看所有消息。
您可能最好编写一个小型订阅者应用程序来接收消息并最终对它们进行 nacks(或者如果您不担心确保将消息快速传递给另一个订阅者,则让确认截止日期到期)。
不幸的是,没有直接命令可以获取未确认消息或 Pub/Sub 中未确认消息的数量。
但是,您可以使用此方法使用Stackdriver Monitoring
pubsub.googleapis.com/subscription/num_undelivered_messages
。
Cloud Monitoring 有一个 API,因此您可以通过编程方式获取此编号。
这是如何做到的:
您可以通过projects.timeSeries.list方法获取值。 将名称设置为projects/<your project>
并使用此过滤器:
metric.type = "pubsub.googleapis.com/subscription/num_undelivered_messages"
或者,如果你想要一个特定的订阅,你可以添加这个过滤器:
resource.label.subscription_id = "<subscription name>".
结果将是一个或多个带有点字段的TimeSeries类型,包括指定时间范围内的数据点。 它将值的 int64 值设置为订阅者未确认消息的数量。
另外,您可以查看有关Cloud Monitoring API 简介和监控您的 API 使用情况的官方文档。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.