【问题标题】:How to Rollback database in Microservice if RabbitMQ down permanently?如果 RabbitMQ 永久关闭,如何在微服务中回滚数据库?
【发布时间】:2022-01-20 12:15:08
【问题描述】:

我正在尝试在微服务中的四个服务之间进行通信。每个服务都有单独的数据库。我正在使用传奇模式。 我的问题是,如果 RabbitMQ 出现故障或崩溃或无法恢复,如果没有消息队列的帮助,我将如何回滚或恢复数据库?

【问题讨论】:

    标签: .net-core rabbitmq microservices saga


    【解决方案1】:

    我假设您使用 SAGA 模式来保持微服务应用程序的一致性。此模式的主要组件是协调您的微服务的 Orchestrator,我假设在您的应用程序中您使用 rabitmq 进行消息传递。 一种方法是将消息存储在微服务的本地数据库中,如果您无法将消息发送到队列,您可以添加一个调度程序,该调度程序将在一段时间后尝试将消息发送到队列。 第二种方法是在集群模式下使用 rabitmq,这将防止您的应用程序出现单点故障。

    【讨论】:

    • 嗨 Ranja,n 感谢您的回答,基本上我已经在 kubernetes 集群上进行了测试,一切正常,但是我正在处理的场景,如果 rabbitMQ 出现故障并且没有复制,有没有办法还原所有其他数据库。 (可能听起来不切实际的情况,但如果可行的话正在寻找一种方法)。 ?提前致谢。
    • 我能想到的唯一方法是将您的消息发布保持在本地事务的范围内,因此假设您的第一个服务在提交事务之前对其本地数据库进行了一些更改,您确保您的消息具有如果 rabbitmq 确认您的服务消息,则已被 rabbitmq 确认 如果 rabbitmq 已关闭,则提交您的事务。
    猜你喜欢
    • 2020-07-05
    • 2020-01-30
    • 1970-01-01
    • 2018-05-01
    • 2014-01-09
    • 2017-09-15
    • 1970-01-01
    • 2019-12-03
    • 2019-10-30
    相关资源
    最近更新 更多