gpt4 book ai didi

rabbitmq - 将微服务与事件同步 (RabbitMQ)

转载 作者:行者123 更新时间:2023-12-04 17:33:16 29 4
gpt4 key购买 nike

我们正在使用微服务架构在 nodejs 中实现 Web-API。每个服务都会公开 HTTP 端点,以便应用程序/网站可以与其交互。为了同步不同的数据库,我们目前使用 RabbitMQ。微服务可以在扇出交换上发布消息,每个订阅的微服务都会收到该消息。

这种架构有两个问题。

  • 如果我们想添加微服务的第二个实例(出于负载平衡目的等)怎么办。如果第二个服务订阅同一个扇出交换,消息将被消费两次。
  • 要么确认不适用于扇出交换,要么我做错了什么。当我在没有订阅者的情况下在扇出交换上发布消息时,这些消息会立即消失而不会被确认。

  • 这使我想到了我的问题。 RabbitMQ 是微服务同步的好选择还是我们应该改变我们的架构。这是我希望它如何工作的一个简短示例:
  • 用户创建了一个新帐户
  • auth-mc 在其数据库中插入用户并发布“user.created”事件
  • a1-mc、a2-mc(相同的 mc,只是负载均衡)和 b1-mc 是交易所的订阅者。 a1 或 a2 以及 b1 接收事件并将用户插入各自的数据库
  • 该事件仅在其确认后才从每个微服务队列中删除

  • 这样我就可以确定,每个微服务(负载平衡与否)都会收到一次消息。这样的模式甚至可以使用 RabbitMQ 来实现吗?

    编辑:如果有任何建议,还可以寻找有关微服务的优秀文献。

    最佳答案

    让我们使用 topic交换而不是 fanout为了你的目的。只有一个消费者会收到消息,而不是所有消费者。您可以根据 routing_key 路由您的消息不同消费者的参数。例如,你有一个交换。您将三个不同的队列绑定(bind)到此交换,并使用相同的路由 key 。您的消息将为每个队列复制!来自不同微服务的消费者可以分别读取消息并执行他们需要的操作。消息在您确认之前不会被删除,但使用 TTL 推送消息是一个很好的做法。

    关于rabbitmq - 将微服务与事件同步 (RabbitMQ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57784672/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com