PubSub 最大传递尝试次数和死信主题
Posted
技术标签:
【中文标题】PubSub 最大传递尝试次数和死信主题【英文标题】:PubSub Maximum delivery attempts & Dead letter topic 【发布时间】:2021-07-24 20:18:45 【问题描述】:5 月 1 日快乐,
我正在做一个简单的 POC 来利用 PusSub 的死信主题功能。我将订阅配置为在 20 次最大传递尝试后将消息重新发布到单独的死信主题(以下是订阅拉取代码和使用的示例消息)。 注意:我使用 Cloud Console 配置了订阅。
问题/挑战:即使经过 36 次传递尝试,测试消息仍然没有重新发布到死信主题。根据文档,我假设我的测试消息将重新发布到死信主题,并且不应在 20 次尝试后传递。我错过了什么?
拉取订阅码
const PubSub = require('@google-cloud/pubsub');
var moment = require('moment');
process.env['GOOGLE_APPLICATION_CREDENTIALS'] = 'abcxyz.json';
const pubSubClient = new PubSub();
const timeout = 100;
async function listenWithCustomAttributes()
const subscription = pubSubClient.subscription("projects/random-1234/subscriptions/testsub");
// Create an event handler to handle messages
const messageHandler = (message) =>
const datetime = moment().format('mmmm do yyyy, h:mm:ss a');
console.log(`$datetime::: $message.id:`);
console.log(`$message.data`);
console.log(`Delivery Attempt: $message.deliveryAttempt`);
console.log(`custom Attributes: $JSON.stringify(message.attributes)`);
console.log('\n');
//NACK for re-delivery
message.nack();
;
subscription.on('message', messageHandler);
setTimeout(() =>
subscription.removeListener('message', messageHandler);
, timeout * 1000000);
listenWithCustomAttributes();
PubSub 消息示例
const message =
"event": "First",
"message": "HELLOWORLD!!!!",
;
【问题讨论】:
Please do not upload images of code/errors when asking a question. 【参考方案1】:我终于能够解决这个问题了。
根据documentation“如果您使用 Cloud Console 配置订阅,则会自动授予角色。”但是,这似乎不再有效。我们需要在订阅控制台的“DEAD LETTERING”(OVERVIEW 旁边)中授予所需的发布者和订阅者角色,或者按照文档中的说明添加 iam 策略。
【讨论】:
以上是关于PubSub 最大传递尝试次数和死信主题的主要内容,如果未能解决你的问题,请参考以下文章
Google Cloud Pub/Sub - 捕获发送到死信主题的消息的消息传递失败原因[关闭]
GCP - 如何添加关于发送到 pubsub 死信队列的消息数量的警报?