Google Cloud Pub / Sub Retry Count

时间:2016-07-26 20:24:13

标签: node.js google-app-engine publish-subscribe gcloud google-cloud-pubsub

我们正在从一个不稳定的消息队列服务转移到NodeJS中的Google的Pub Sub。它似乎运行良好但我们希望包含错误处理。

我们希望限制特定邮件的重试次数,例如在我们的测试环境中重复10次,在生产中重复100次。现在,如果一条消息失败10次(在测试中),而不是它在我们的队列中并继续处理并失败7天,我们希望将其移至单独的错误队列并向我们发送电子邮件。

我们目前已在之前的消息队列中设置了所有这些内容,但我们尚未找到每条消息的Google的Pub Sub重试次数属性。有谁知道这是否存在?

我们确实在Google App Engine中使用了任务队列,他们拥有我们需要的一切,但Google的pub sub似乎缺失了很多。我们确实要求任何解决方案都在Node中。

2 个答案:

答案 0 :(得分:8)

Cloud Pub / Sub对重试向订阅者发送邮件的次数没有限制。如果您的订户从未在确认截止日期之前确认该消息,则将重新传送该消息,直到该消息在7天后过期。

如果您想停止接收这些消息,那么您需要在某些时候确认它们。如果你想防止死亡的消息"您的订阅者无法处理,我建议如下:

  1. 跟踪数据库中的消息失败计数,按消息ID键入。希望故障不常见,所以这个数据库不应该太大,只有在实际出现故障时才会对它进行查询。

  2. 当邮件失败时,查询数据库并查看之前发生过多少次失败。增加计数器,如果计数低于您的阈值,则不会确认消息。

  3. 如果邮件的失败次数超过您的阈值,请将邮件发布到单独的"失败邮件"主题,发送电子邮件,并确认消息。

  4. 如果有必要,可以通过这种方式发布来自"失败消息的消息"当问题首先导致消息失败的问题得到纠正时,回到主题。

  5. 现在,您已将消息保存在单独的主题中(7天或直到您确认),并且该消息无法重新传送到主要主题的订阅者。

答案 1 :(得分:-2)

在python中,请参阅.execute()上的'num_retries'参数:

pubsub_client.projects().topics().publish(topic='projects/xxxx',body=body).execute(num_retries=0)

不确定Node.JS中是否存在相同的内容,但我希望这能指向正确的方向。