I have a worker attached to a subscription processing messages. Depending on the message payload, the worker could possibly take days to completely process the message.
I'm a bit confused by different properties that the client can set that control how the Pub/Sub client library automatically extends the deadline so that the worker can process the message without fearing that the message will be redelivered.
Properties from documentation which is not very clear :
MinimumAckDeadline
, MaximumAckDeadline
, DefaultAckDeadline
, MinimumAckExtensionWindow
, DefaultAckExtensionWindow
, MinimumLeaseExtensionDelay
, and DefaultMaxTotalAckExtension
I believe I want to set DefaultMaxTotalAckExtension
to a large value (several days) to allow my subscriber to continue working on the message without getting some kind of time out.
But I think I also want to modify the AckDeadline so that Pub/Sub knows that the client is still alive. Not sure which one I would want to modify: MinimumAckDeadline
, MaximumAckDeadline
, DefaultAckDeadline
.
Aside from those properties, I don't know if I need to set MinimumAckExtensionWindow
, DefaultAckExtensionWindow
, or MinimumLeaseExtensionDelay
.
CodePudding user response:
All of the properties you mentioned are default/limit properties for the SubscriberClient
class itself. Note that they are static only have getters, not setters. What you want to set is MaxTotalAckExtension
, which controls the maximum amount of time a message's lease will be extended.
However, taking days to process a message is considered an anti-pattern for Cloud Pub/Sub and will very likely result in duplicate deliveries. If you are going to take that long to process a message, you probably need to look at other options like persisting it locally (in a file or in a database), acking it, and then processing it. At that point, you may consider just writing directly to a database instead of to Pub/Sub and scanning for rows that need to be processed by your subscribers.