抽丝剥茧,细说架构那些事——【优锐课】
反应式编程是使你的应用程序更高效的一种越来越流行的方式。响应式应用程序异步调用响应,而不是调用资源并等待响应。这使他们可以释放处理能力,仅在必要时执行处理,并且比其他系统更有效地扩展。
Java生态系统在反应框架中占有相当大的份额,其中包括Play框架,Ratpack,Vert.x和Spring WebFlux。像反应式编程一样,微服务架构可以帮助大型团队快速扩展,并且可以使用上述任何出色的框架进行构建。
今天,我想向你展示如何使用Spring Cloud Gateway,Spring Boot和Spring WebFlux构建反应性微服务架构。我们将利用Spring Cloud Gateway,因为API网关通常是云原生微服务架构中的重要组件,可为你所有的后端微服务提供聚合层。
本教程将向你展示如何使用REST API构建微服务,该API返回新车列表。你将使用Eureka进行服务发现,并使用Spring Cloud Gateway将请求路由到微服务。然后,你将集成Spring Security,以便只有经过身份验证的用户才能访问你的API网关和微服务。
Prerequisites: HTTPie (or cURL), Java 11+, and an internet connection.
Spring Cloud Gateway vs. Zuul
Zuul是Netflix的API网关。Zuul最初于2013年发布,最初并不具有反应性,但Zuul 2是彻底的重写,使其具有反应性。不幸的是,Spring Cloud不支持Zuul 2,并且可能永远不会支持。
现在,Spring Cloud Gateway是Spring Cloud Team首选的API网关实现。它基于Spring 5,Reactor和Spring WebFlux。不仅如此,它还包括断路器集成,使用Eureka进行服务发现,并且与OAuth 2.0集成起来要容易得多!
接下来让我们深入了解。
创建一个Spring Cloud Eureka Server项目
首先创建一个目录来保存你的所有项目,例如spring-cloud-gateway。在终端窗口中导航至它,并创建一个包括Spring Cloud Eureka Server作为依赖项的discovery-service项目。
http https://start.spring.io/starter.zip javaVersion11 artifactIddiscovery-service
nameeureka-service baseDirdiscovery-service
dependencies==cloud-eureka-server | tar -xzvf -
上面的命令使用HTTPie。我强烈建议安装它。你也可以使用卷曲。运行curlhttps://start.spring.io以查看语法。
在其主类上添加@EnableEurekaServer,以将其用作Eureka server。
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@EnableEurekaServer
@SpringBootApplication
public class EurekaServiceApplication {…}
将以下属性添加到项目的src / main / resources / application.properties文件中,以配置其端口并关闭Eureka注册。
server.port=8761
eureka.client.register-with-eureka=false
要使发现服务在Java 11+上运行,请添加对JAXB的依赖关系。
org.glassfish.jaxb jaxb-runtime使用./mvnw spring-boot:run或通过在IDE中运行它来启动项目。
创建一个Spring Cloud Gateway项目
接下来,创建一个包含一些Spring Cloud依赖项的api-gateway项目。
http https://start.spring.io/starter.zip javaVersion