如何知道 pub/sub 主题是否包含具有特定内容的消息?

How to know if the pub/sub topic contains messages with specific content?

我有 X 个微服务,每个服务都发布到同一个 pub/sub 主题。他们发布的消息包含微服务 ID。 我正在寻找一种方法来确保 pub/sub 已完成对某个微服务的所有消息的服务。 我目前的解决方案是计算从微服务发布的所有消息,然后计算在 pub/sub 主题中提供的消息(通过云功能)。这种方法存在一些已知问题,我想知道是否有更好的方法来了解 pub/sub 是否不包含来自特定微服务的消息?

要了解邮件的内容,没有比获取邮件、打开并阅读邮件更好的方法了。

更好的解决方案可能是为每种类型的消息使用单独的主题,并且订阅队列为空,这意味着所有消息都已处理。如果您需要统计它们,您可以使用日志来跟踪您在 Cloud FUnctions 中的消息处理。

另一种方法是使用单个 PubSub 主题并在消息的属性中添加 ID。然后,您可以使用该属性的过滤器创建 PubSUb 订阅,并像以前一样监督订阅。

该解决方案的缺点是它不符合 Cloud Functions PubSub 集成。您需要创建 HTTP 函数和 PubSub 推送订阅才能利用过滤器功能。

我最终得到的解决方案如下:

  1. 在redis中创建一个set,并向其中添加一个新的消息id
  2. 在发布到 pubsub 的消息中包含这个新消息 ID
  3. 在 pubsub 之后运行的云函数应该从集合
  4. 中删除新的 message_id
  5. 在流程结束时,我们检查集合,如果它为空则流程完成。

这也处理 pub/sub 多次发布相同消息的时间。