为啥 PubSub 订阅在保留期到期后向死信主题发布消息

Posted

技术标签:

【中文标题】为啥 PubSub 订阅在保留期到期后向死信主题发布消息【英文标题】:Why PubSub subscription publish a message to dead letter topic after retention period expires为什么 PubSub 订阅在保留期到期后向死信主题发布消息 【发布时间】:2020-12-14 09:10:09 【问题描述】:

我需要在 PubSub 中跟踪未传递的消息。但是,当 PubSub Pull 订阅的订阅者在保留期后不可用时,订阅中的消息将永远丢失。它没有被为订阅创建的死信主题捕获。

如果重试次数超过并且订阅者没有收到确认,PubSub 似乎只会向死信主题发送消息。

有没有办法在消息永远丢失之前将消息推送到死信主题?

【问题讨论】:

Arvin,您是否只需要能够将消息存储超过保留期,因为您需要更多时间来处理消息,还是您实际上需要将旧消息放在单独的主题中用于带外处理? 【参考方案1】:

由于保留期到期,没有办法在消息被删除之前将消息发送到死信主题,不。死信主题的目标是捕获导致订阅者出现问题并可能阻止其他消息处理的消息,例如,如果订阅者由于意外消息而崩溃。检测此状态的方式是通过重试计数。

【讨论】:

那么死信主题就无法检索到未送达的消息? “检索未送达的邮件”是什么意思?死信主题不检索消息; Pub/Sub 服务向主题发布超过重试次数的消息,然后可以通过在死信主题上创建订阅来访问这些消息。 好的,所以我想说的是,在保留期到期之前,我想要一些机制来在这些未传递的消息丢失之前获取它们。有办法吗? 没有,没有。在 Pub/Sub 中获取消息的唯一方法是通过订阅者。 re: lost forever 如果您使用自己的自定义死信主题/队列,让我提醒您,发送到没有订阅的主题的消息基本上会被丢弃,因此拥有订阅到位。所以也许如果你订阅了你的死信队列,那么它们就不会消失在你身上。

以上是关于为啥 PubSub 订阅在保留期到期后向死信主题发布消息的主要内容,如果未能解决你的问题,请参考以下文章

Google Pubsub - 接收推送订阅的传递尝试

Google pubsub 死字在 golang 中不起作用

如何通过转发到死信主题来限制 Google Pub/Sub 交付尝试?

PubSub 死字

GCP - 如何添加关于发送到 pubsub 死信队列的消息数量的警报?

如何使用 Java 将错误消息移动到 Azure 死信队列(主题 - 订阅)?