在发布/订阅和消息传递队列中为多个消费者提供消息传递保证

问题描述

要求

系统发生一些状态更改,并且系统的其他多个部分也必须知道这一点(我们称它们为观察者),以便他们可以基于当前状态执行某些操作,观察者的操作很重要,如果某些操作的观察者不在线(由于某些问题当前不收听,但是很快会回来),在所有观察者获得消息之前,不应丢弃该消息。

尝试使用pub / sub模型完成此操作,这是我的发现((如果理解错误,请更正)-

发布者针对特定主题创建事件,多个订阅者可以使用 same 消息。此模型要么不提供任何传递保证(以redis形式),要么提供一次传递保证(使用消息队列),即。当使用者之一确认一条消息时,该消息将被丢弃(rabbitmq)。

示例

在数据库中创建了一个新的Person Profile实体

现在

  1. 后台验证服务必须知道这一点才能触发验证过程。
  2. 订阅服务必须知道这一点,才能向用户添加默认订阅。

现在,这两项任务都很重要,不相关并且可以并行运行。

现在,在队列模型中,如果订阅服务由于某种原因而关闭,则BG验证过程将确认该消息,该消息将从队列中删除,或者如果它像大多数pub / sub一样被触发而忘了传递,无论如何都不能保证这两种服务。

还有一点是,两个任务都不相关,不需要一个接一个地触发。


简而言之,我需要确保所有消费者都收到相同消息,并且他们应该能够分别确认他们,消息应该是只有在所有消费者都承认之后才驱逐以上两种方法中的任何一种都不这样做。

这里我想念什么吗?我应该如何解决这个问题?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)