微服务异步响应

jef*_*eff 7 rabbitmq spring-boot microservices

我看到很多博客都说由于rabbitmq 的异步特性,使用rabbitmq 可以提高微服务的性能。

我不明白在这种情况下如何将 http 响应发送给最终用户我正在下面更清楚地阐述我的问题。

  1. 用户向 microservice1(这是面向用户的服务)发送 http 请求

  2. microservice1 将它发送到 rabbitmq 因为它需要来自 microservice2 的一些服务

  3. microservice2 接收请求处理它并将响应发送到rabbitmq

  4. microservice1 接收来自rabbitmq 的响应

现在如何将此响应发送到浏览器?microservice1 是否一直等到它收到来自rabbitmq 的响应?如果是,那么它如何变得异步?

Kie*_*eli 4

这是一个好问题。要回答这个问题,您必须想象服务器一次运行一个线程。通过 RestTemplate 向微服务发出请求是阻塞请求。用户点击网页上的按钮,就会触发你在 microservice1 中的 spring-boot 方法。在该方法中,您向 microservice2 发出请求,microservice1 会阻塞等待响应。

该线程正忙于等待 microservice2 完成请求。线程并不昂贵,但在非常繁忙的服务器上,它们可能是一个限制因素。

RabbitMQ允许microservice1将消息排队到microservice2,然后释放线程。当 microservice2 处理消息并提供响应时,您的接收消息将由系统(spring-boot / RabbitMQ)触发。同时,线程池中的该线程可用于处理其他用户的请求。当 RabbitMQ 响应到来时,线程池使用未使用的线程来处理请求的其余部分。

实际上,您正在使运行 microservice1 的服务器在更多时间内拥有更多可用线程。只有当服务器负载过重时才会出现问题。