Google Pubsub - 接收推送订阅的传递尝试
Posted
技术标签:
【中文标题】Google Pubsub - 接收推送订阅的传递尝试【英文标题】:Google Pubsub - Receive delivery attempt for push subscription 【发布时间】:2021-06-01 20:57:17 【问题描述】:我有一个由 Pubsub 推送订阅触发的 Google 云功能。
我想知道给定消息的当前传递尝试。
在请求订阅中,它通过设置死信主题来工作,但是我无法在推送订阅消息属性中获得传递尝试。尝试配置死信主题,delivery_attempt
属性不在消息属性中。
有没有办法在推送订阅中获取传递尝试参数?
【问题讨论】:
消息向函数显示了多少次?只有一个?几次? 【参考方案1】:我不确定是否可以明确获取该数据...但我可以提出一个解决方法的想法以供考虑。
每次调用云函数时,您都可以(在您的代码中)创建/更新具有一些唯一 ID(消息事件 ID 或一些唯一业务相关标识符)的 Firestore 文档。该文档可能具有属性,其中之一是时间和/或尝试次数。
【讨论】:
【参考方案2】:对于推送订阅,请使用 deliveryAttempt
,而不是 delivery_attempt
。文档中提到了这个here:
当 Pub/Sub 从推送订阅转发无法投递的消息时,您从订阅中收到的每条消息都包含
deliveryAttempt
字段。
【讨论】:
【参考方案3】:在java中你可以使用订阅者类的静态方法。
对于 PubsubMessage 消息;
com.google.cloud.pubsub.v1.Subscriber.getDeliveryAttempt(message);
根据文档 sais 返回接收到的 PubsubMessage 的传递尝试计数。
Integer maxAttemps = 5;
private void killMessage(Event<String> event, Exception en,
BasicAcknowledgeablePubsubMessage acknowledgeable)
Integer attemps = Subscriber.getDeliveryAttempt(acknowledgeable.getPubsubMessage());
if(attemps.intValue() < maxAttemps)
acknowledgeable.nack();
return;
sendToErrorQueue(event, en, acknowledgeable);
https://googleapis.dev/java/google-cloud-pubsub/latest/com/google/cloud/pubsub/v1/Subscriber.html
【讨论】:
以上是关于Google Pubsub - 接收推送订阅的传递尝试的主要内容,如果未能解决你的问题,请参考以下文章
Google pubsub golang 订阅者在空闲几个小时后停止接收新发布的消息
如何通过 terraform 使用服务帐户创建 google cloud pubsub pull 订阅?