微服务为什么使用RabbitMQ?

问题描述 投票:30回答:3

我还没有发现现有的帖子问这个问题,但是如果我错过了,我深表歉意。

我正在努力使自己了解微服务,并遇到了使用RabbitMQ的文章。我很困惑为什么需要RabbitMQ。服务是否打算使用Web api与外界通信以及RabbitMQ与彼此通信?

rabbitmq microservices
3个回答
51
投票

在微服务架构中,您有两种在微服务之间进行通信的方式:

  • 同步-也就是说,每个服务直接调用另一个微服务,这导致服务之间的依赖性
  • 异步-您具有一些中央集线器(或消息队列),您可以在其中将所有请求放置在微服务之间,而相应的服务则接收该请求,对其进行处理并将结果返回给调用方。这就是RabbitMQ(或其他任何消息队列-MSMQ和Apache Kafka是很好的选择)的用途。在这种情况下,所有微服务仅了解集线器的存在。

[microservices.io有一些关于使用微服务的很好的文章


30
投票

消息队列提供了异步通信协议-您可以选择将消息从一个服务发送到另一个服务,而不必知道另一个服务是否能够立即处理它。消息可以等待直到负责的服务准备就绪。发布消息的服务不需要了解将处理该消息的服务的内部运作情况。这种处理生产者与消费者之间的消息decouple的方式。

消息队列将使您应用程序中的进程相互独立且相互独立;这种处理消息的方式可以创建一个易于维护且易于扩展的系统。

[Here是一个故事,解释了Parkster(数字停车服务)如何通过使用RabbitMQ将其系统分解为多个微服务。

This guide遵循一种方案,其中Web应用程序允许用户将信息上载到网站。该站点将处理此信息并生成PDF并将其通过电子邮件发送给用户。在此示例中,处理信息,生成PDF以及发送电子邮件将花费几秒钟,这就是为什么使用消息队列的原因之一。

Here是一个有关howwhy CloudAMQP在微服务之间使用的消息队列和RabbitMQ的故事。

Here是有关在基于事件的微服务体系结构中使用RabbitMQ来每月支持一亿用户的故事。

最后是Kontena的link,关于他们为什么选择RabbitMQ作为其微服务体系结构的原因:“因为我们需要一种稳定,可管理且高度可用的消息传递解决方案。”

请注意,我为CloudAMQP背后的公司工作。


0
投票

相同的问题可能是为什么微服务需要REST?微服务概念在月球下并不是什么新鲜事物。工作流的长时间分配用于后端工程和异步请求处理,微服务是单独的jvm中的相同组件,与SOLID中的S(单一职责)匹配。使其成为微型服务的原因-它是平衡的。仅此而已!特别是(!),它可以是Eureka注册的,基于Spring Cloud / REST的REST服务,具有代理网关以及Zuul和Ribbon上的负载平衡。但这并不是微服务的整个世界!顺便说一句,异步分布式处理是微服务用于的任务之一。很久以前,分离的JVM中的服务(组件)已通过任何消息传递集成在一起,这种模式称为ESB。微服务是同一主题。由于Spring Cloud的流行,REST似乎是微服务的唯一方法。不!例如,Vertx https://dzone.com/articles/asynchronous-microservices-with-vertx支持基于消息的异步微服务体系结构。为什么不使用RabbitMQ作为消息通道?在这种情况下,可以通过构建RabbitMQ集群来提供负载平衡。例如:https://codeburst.io/using-rabbitmq-for-microservices-communication-on-docker-a43840401819。因此,世界更加广阔。

© www.soinside.com 2019 - 2024. All rights reserved.