Spring Cloud Eureka是Spring Cloud Netflix项目下的服务治理模块。而Spring Cloud Netflix项目是Spring Cloud的子项目之一,主要内容是对Netflix公司一系列开源产品的包装,它为Spring Boot应用提供了自配置的Netflix OSS整合。通过一些简单的注解,开发者就可以快速的在应用中配置一下常用模块并构建庞大的分布式系统。它主要提供的模块包括:服务发现(Eureka),断路器(Hystrix),智能路由(Zuul),客户端负载均衡(Ribbon)等。
创建一个项目spring-cloud-eureka
引入子模块需要的依赖:
1 |
|
创建服务注册中心
在Idea中创建一个Eureka服务子模块,命名为spring-cloud-eureka-server,并在pom.xml中引入需要的依赖内容:
1 |
|
创建 启动类:
1 | //表示是一个eurekaserver |
增加配置:
1 | security: |
创建服务提供方
创建一个服务spring-cloud-eureka-provider,引入依赖:
1 |
|
创建启动类:
1 |
|
创建配置:
1 | server: |
创建服务 :
1 |
|
启动项目后,浏览器查看注册中心,可以看到服务已经被注册到注册中心。
同样方式创建服务的消费者
创建服务消费方
创建子模块spring-cloud-eureka-consumer,引入依赖:
1 |
|
创建配置:
1 | server: |
创建启动类:
1 | /** |
创建控制器,控制器中调用了注册中心的提供者服务
1 |
|
运行,浏览器访问控制器,获取了服务提供者的信息。
Spring Cloud Consul
Spring Cloud Consul项目是针对Consul的服务治理实现。Consul是一个分布式高可用的系统,它包含多个组件,包含了下面几个特性:
- 服务发现
- 健康检查
- Key/Value存储
- 多数据中心
基于Spring Boot的微服务应用注册到Consul上,实现微服务架构中的服务治理。
以之前实现的基于Eureka的示例为基础,只需要在pom.xml中将eureka的依赖修改为如下依赖:
1 | <dependency> |
再修改配置文件:
1 | spring: |
这样就把基于Eureka的服务换为基于consul服务治理的服务提供者;
Spring cloud服务发现的接口DiscoveryClient是Spring Cloud对服务治理做的一层抽象,所以可以屏蔽Eureka和Consul服务治理的实现细节,只需要引入不同的服务治理依赖,并配置相关的配置属性即可。
consul是服务端不需要像Eureka那种创建,直接下载consul的服务端程序就可以使用。
Spring Cloud Ribbon
Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。它是一个基于HTTP和TCP的客户端负载均衡器。它可以通过在客户端中配置ribbonServerList来设置服务端列表去轮询访问以达到均衡负载的作用。
- 当Ribbon与Eureka联合使用时,ribbonServerList会被DiscoveryEnabledNIWSServerList重写,扩展成从Eureka注册中心中获取服务实例列表。同时它也会用NIWSDiscoveryPing来取代IPing,它将职责委托给Eureka来确定服务端是否已经启动。
- 当Ribbon与Consul联合使用时,ribbonServerList会被ConsulServerList来扩展成从Consul获取服务实例列表。同时由ConsulPing来作为IPing接口的实现。
不论是与Eureka还是Consul结合,都可以快速在Spring Cloud中实现服务间调用的负载均衡。
在之前的模块中,引入依赖:
1 | <dependency> |
修改类增加@LoadBalanced注解(其实前面已经使用了):
1 |
|
去掉通过LoadBalancerClient选取实例和拼接URL的步骤,直接通过RestTemplate发起请求。
1 | return resttemplate.getForObject(url, String[].class); |
这样就实现了一个简单的Ribbon负载均衡。
Spring Cloud Feign
Spring Cloud Feign是一套基于Netflix Feign实现的声明式服务调用客户端。它使得编写Web服务客户端变得更加简单。我们只需要通过创建接口并用注解来配置它既可完成对Web服务接口的绑定。它具备可插拔的注解支持,包括Feign注解、JAX-RS注解。它也支持可插拔的编码器和解码器。Spring Cloud Feign还扩展了对Spring MVC注解的支持,同时还整合了Ribbon和Eureka来提供均衡负载的HTTP客户端实现。
新建一个模块spring-cloud-eureka-consumer-feign,引入依赖:
1 | <dependency> |
启动类:
1 | /** |
创建一个Feign的客户端接口:
1 | /** |
控制器直接通过接口去掉服务:
1 | /** |
这样就完成了简单的整合调用。