RabbitMQ保证交付-是重新发布者服务的正确解决方案

时间:2019-01-09 09:35:27

标签: rabbitmq messaging

我们使用RabbitMQ作为代理,在这里我们将处理交易数据的OLTP Web应用程序与其他问题(例如报告应用程序)分开。在这个特定的生态系统中,报告数据必须尽可能地是最新的,以免消息永久丢失。

但是由于各种原因消息可能会丢失,即使启用了内置的Rabbitmq发布者确认和确认功能,在极端情况下,例如在某些情况下,我们仍然可能会丢失一些消息。网络故障。

因此,我们提出了一个解决方案-重新发布者服务。

重新发布者服务的工作方式如下:

  • 通过时间表每30分钟启动一次
  • 对于适当的时间窗口,从源(WebServiceA)数据存储获取事件计数,从目标(ReportingService)数据存储获取事件计数,检查它们是否匹配。如果它们匹配-退出
  • 由于计数不匹配,因此从源应用程序dababase(WebServiceA)获取了最近2个小时的事件数据。
  • 将每条消息重新发布给Rabbitmq经纪人
  • 订阅应用程序(ReportingService)是幂等的,即它可以处理多次接收同一条消息

enter image description here

我们拥有的解决方案有效,它不能100%确保交付,但是凭借重新发布者服务的安全网,我们还没有看到消息无法到达目的地。

我的问题是我们是用错误的方式进行操作还是在重新发明轮子?有没有人有类似的要求,您是否也以类似的方式保证交货?

我们确实知道,从体系结构的角度来看,这种方法很差,因为重新发布者需要直接访问源数据库和目标数据库。 (共享数据库)。这也意味着,每当需要为新的源服务添加报告时,我们也必须编写重新发布代码。

0 个答案:

没有答案