Google云端发布/子重试次数

问题描述:

我们正在从一个不稳定的消息队列服务转移到NodeJS中的Google Pub Sub。它似乎工作正常,但我们想包括错误处理。Google云端发布/子重试次数

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

我们目前已将所有这些设置在我们之前的消息队列中,但我们还没有为每条消息找到Google的Pub Sub重试计数属性。有谁知道这是否存在?

我们在Google App Engine中使用任务队列,他们拥有我们需要的所有东西,但Google的pub子似乎缺少很多。我们确实需要任何解决方案在Node中。

在Python中,看到“NUM_RETRIES”上.execute参数():如果在node.js的存在同样的事情,但我希望这点你在正确的方向

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

不知道。

+0

嗨Aerodyno,这让我非常兴奋。我也在Python文档中看到它,但是当我们查看Github的Python和NodeJS时,它并未实现或记录在案。 –

+2

num_retries属性将影响发布失败时重试的次数,例如,出于某种原因,发布者无法到达Cloud Pub/Sub。如果订阅者不能处理和确认消息,它不会影响消息传递给订阅者的次数。 –

云端发布/订阅者对重试向订阅者发送邮件的次数没有限制。如果您的用户从不在确认期限内确认该消息,它将被重新发送,直到消息7天后过期。

如果你想停止接收这些消息,那么你需要在某些时候确认它们。如果你想防止不能被你的用户处理“死亡的消息”,我提出以下建议:

  1. 跟踪邮件失败计数的数据库中,由信息ID键。希望失败不是很频繁,所以这个数据库不应该太大,只有在实际发生故障时才会进行查询。

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

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

  4. 如果有必要,有办法从“失败的消息”主题发布消息回到您的主题,当首先导致消息失败的问题得到解决。

您现在保存在单独的主题(7天或直到你确认它),该消息不会被重新传递到你的主要话题的用户信息。

+0

感谢卡迈勒的回应。我认为你的回应是有效的,因为我们将以不同的方式实施它。由于在数据库中保留消息失败计数似乎是无用信息,特别是如果实际消息消失,我们将在每个对象上存储排队或发布日期。如果对象在主题中停留一天或更长时间,我们会将该消息添加到数据库并将其从主题中确认/删除。这使我们可以安静地记录日志,限制重试次数,并让消息无法查看并可用超过7天。 –

+0

我们认识到App Engine中的任务队列将会很完美,但它们不会被Node支持。再次感谢您的回应! –

+0

appengine中的任务队列有一个REST API(尽管还有beta标签)https://cloud.google.com/appengine/docs/python/taskqueue/rest/ – marcadian