有许多教程和文章(包括官方网站)将spring boot作为构建微服务的好工具。
假设我们有一些其他api端点(用户配置文件),它聚合来自多个服务的数据(用户服务,统计服务,朋友服务)。
为实现此目的,用户配置文件端点对这些服务进行3次http调用。
但是在Spring中,请求是阻塞的,正如我所看到的,服务器将很快耗尽可用资源(线程)来在这样的系统中提供请求。
所以对我来说,构建这样的系统是非常低效的方式(与非阻塞框架相比,比如play!framework或node.js)
我错过了什么吗?
P.S。:我不是指今年春季5的新webflux框架。
答案 0 :(得分:1)
没有人阻止您使用Spring Boot构建异步微服务架构:)。
这些方面的东西:
服务可以将事件放入队列(例如RabbitMQ),而不是一个服务同步调用另一个服务。事件将传递给订阅这些事件的服务。
使用RabbitMQ及其"交换"概念,事件提供服务甚至不需要消费者的事件。
可以在此处找到使用Spring Boot代码详细说明此内容的博文:https://reflectoring.io/event-messaging-with-spring-boot-and-rabbitmq/
答案 1 :(得分:1)
这不是Spring的限制,而是与应用程序架构有关。
虽然这种解决方案非常普遍,但它具有同步的限制,因此具有阻塞性。此类场景中的异步行为应以特定于应用程序的方式实现。
话虽如此,如果您必须调用其他服务以便能够响应来自客户端(外部)的请求,这通常是架构问题。如果您使用HTTP或异步消息传递(使用请求 - 回复模式),这无关紧要,外部客户端的总体响应时间将会很糟糕
另外,我已经看到很多应用程序对外部客户端使用同步REST调用,但是当内部MicroServices之间需要通信时,它应该始终是异步的。您可以在此处阅读有关此主题的有趣论文MicroServices Messaging Patterns