danday74
danday74

Reputation: 57215

How to list/view messages on subscription in Gcloud pubsub?

I can acknowledge all messages on a subscription as follows:

gcloud pubsub subscriptions pull --auto-ack --limit=999 my-sub

(Although I often have to run this repeatedly before all messages are acknowledged).

However, I don't want to acknowledge them, I just want to see all unacknowledged messages (or just a count of how many unacknowledged messages there are would be helpful too).

I thought it might be:

gcloud pubsub subscriptions pull --limit=1 my-sub

But when I run this command it shows a different message every time.

I did this in the hope that I could run:

gcloud pubsub subscriptions pull --limit=999 my-sub

To see all unacknowledged messages.

Upvotes: 3

Views: 12637

Answers (2)

Raul Saucedo
Raul Saucedo

Reputation: 1780

Unfortunately, there is no direct command to get the unacknowledged messages or the number of unacknowledged messages in Pub/Sub.

However, you can use Cloud Monitoring using this method

pubsub.googleapis.com/subscription/num_undelivered_messages.

Cloud Monitoring has an API, so you can get this number programmatically.

This is how to do it:

You can get the values via the projects.timeSeries.list method. Set the name to projects/<your project> and use this filter:

metric.type = "pubsub.googleapis.com/subscription/num_undelivered_messages"

Or, if you want a specific subscription, you can add this filter:

resource.label.subscription_id = "<subscription name>".

The result will be one or more TimeSeries types with the points field, including the data points for the specified time range. It will have the value's int64 Value set to the number of unacknowledged messages by subscribers.

Also, you can see this official documentation about Introduction to Cloud Monitoring API and Monitoring your API usage.

Upvotes: 3

Kamal Aboul-Hosn
Kamal Aboul-Hosn

Reputation: 17261

You can use gcloud pubsub subscriptions pull to get messages for a subscription. If you do not pass in --auto-ack, then some of the messages should be displayed when you make the call. These messages will likely not be returned in subsequent requests until the ack deadline has passed since they will be considered outstanding when returned to the gcloud command. That is why you see a different message every time you call with --limit=1.

Additionally, setting the limit for the call to pull does not guarantee that all messages will be returned in a single response, only that no more than that may messages will be returned. If you want to see all messages, you'll have to run the command repeatedly, but you won't necessarily be able to see all of them in a deterministic way.

You would probably be better off writing a little subscriber app that receives messages and ultimately nacks them (or just lets the ack deadline expire if you aren't worried about ensuring the messages are delivered quickly to another subscriber).

Upvotes: 5

Related Questions