序
在上一篇文章中,我们分析了 soul-examples-springcloud 模块使用 eureka 作为服务的注册中心,并集成 soul 网关的案例。
从结果上和集成方式来看,效果跟 http 服务的代理一样。
但是我们提出了一个问题:soul 网关有没有使用这个 eureka 注册中心?
eureka 介绍
首先我们先要弄清楚 eureka 是干嘛的。
Eureka 是 Netflix 的一个服务注册中心,主要是用于微服务的注册和发现。
我们都知道,当项目达到一定的量级和复杂度之后,用单体架构已经十分不合适了。
目前主流的做法就是针对项目的模块或者优先级等策略去把一个大项目拆分成多个小项目对外提供服务。可以简单理解成大事化小。
但是这样同样会引入新的问题,各个服务和模块拆分之后,暴露出来的服务就需要有一个地方去统一管理,而且最好是自动化。也就是所谓的「服务注册和发现」。
有了服务注册和发现功能,模块之间的服务调用就统一从这里面去取,同时如果服务有了更新或者下线,注册中心也会同步更新。
eureka 使用介绍
eureka 有 server 端和 client 端,server 端和 client 端都是一个 jar 文件,可以使用 gradle 或者 maven 引入即可。
针对 eureka server,顾名思义就是启动一个 eureka 服务,用来提供服务的注册和发现。
eureka client 就是用来调用 eureka 管理的服务,可以类比成 http 请求的工具类。
soul 网关里面的 eureka
根据上面分析,可以知道如果想要请求 spring cloud 项目的服务,需要引入注册中心(本文就以 eureka 服务为例)。
由于使用了 eureka 注册中心,那么对应的请求方式也需要利用上面提到的 eureka client 依赖去完成。这一点可以从 soul-bootstrap 的 pom.xml 文件里面看到。
<!-- springCloud if you config register center is eureka please dependency end-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<version>2.2.0.RELEASE</version>
</dependency>
spring cloud 项目集成 soul 网关的方式跟之前的 http 项目集成 soul 网关的原理一致,原因也是因为 spring cloud 项目也是通过 http 请求的方式完成服务的调用。
也就是说,spring cloud 项目跟 http 项目的服务代理最后一样会使用 WebClientPlugin 插件去执行。不一样的就是在这之前会分别交给 SpringCloudPlugin 和 DividePluagin 执行。
SpringCloudPlugin 插件个 Divide 插件的逻辑也差别不大,唯一的区别就是服务请求的调用会使用 eureka client 依赖里面的服务发现组件去完成。
总结
本文简单介绍了 eureka 是什么,为什么需要使用它以及怎么去使用它。
然后结合 spring cloud 项目去集成 soul 网关,从中分析得到 eureka 在 soul 网关里的作用,并且最后跟 http 服务做了对比。
spring cloud 项目使用 eureka 作为注册中心跟 http 的原理几乎是一样的,但是如果是其他注册中心呢?
比如 nacos 注册中心,会跟 eureka 一样么?我们下篇文章分析。