将微服务与事件同步(RabbitMQ)
我们正在使用微服务架构在nodejs中实现Web API。每个服务都公开HTTP端点,以便应用程序/网站可以与其交互。为了同步不同的数据库,我们目前正在使用RabbitMQ。微服务可以在扇出交换上发布消息,并且每个订阅的微服务都会收到该消息 这种架构有两个问题将微服务与事件同步(RabbitMQ),rabbitmq,microservices,Rabbitmq,Microservices,我们正在使用微服务架构在nodejs中实现Web API。每个服务都公开HTTP端点,以便应用程序/网站可以与其交互。为了同步不同的数据库,我们目前正在使用RabbitMQ。微服务可以在扇出交换上发布消息,并且每个订阅的微服务都会收到该消息 这种架构有两个问题 如果我们想添加微服务的第二个实例(用于负载平衡等),该怎么办。如果第二个服务订阅相同的扇出交换,则消息将被消耗两次 要么确认与扇出交换不起作用,要么我做错了什么。当我在没有订阅者的扇出式exchange上发布消息时,消息会立即消失而不被确
编辑:如果有任何建议,也可以查找有关微服务的优秀文献。让我们使用
主题
交换,而不是扇出
。只有一个消费者会收到消息,而不是所有消费者。您可以根据routing_key
params为不同的消费者路由消息。例如,您有一个交换。您有三个使用相同路由密钥绑定到此exchange的不同队列。您的消息将为每个队列复制!来自不同微服务的消费者可以分别阅读信息并做他们需要的事情。在您确认之前,邮件不会被删除,但使用TTL推送邮件是一种很好的做法。这似乎可以按预期工作,非常感谢!还有一些事情我不确定。您是为每个微服务创建一个频道,还是为每个订阅/发布创建一个频道?您如何处理未确认或过期的邮件?如果我只是重新查询消息,服务可能会重复获取中断的消息并陷入死锁。我是否应该冒险,回滚所有更改,或者在死信交换中重新查询消息?您可以为每个发布/订阅创建一个交换,但为每个微服务创建一个队列。您的生产者将消息推送到exchange(这是它的一个单点),消费者将其队列绑定到exchange并从此处接收消息。如何处理数据丢失、比赛条件等,取决于具体情况。您有不同的方法来处理这个问题,例如构建RPC模型、锁定机制等。