前言
本篇主要介绍的是SpringCloud中的服务消费者(Feign)和负载均衡(Ribbon)功能的实现以及使用Feign结合Ribbon实现负载均衡。
SpringCloud Feign
Feign 介绍
Feign是一个声明式的Web Service客户端,它使得编写Web Serivce客户端变得更加简单。我们只需要使用Feign来创建一个接口并用注解来配置它既可完成。它具备可插拔的注解支持,包括Feign注解和JAX-RS注解。Feign也支持可插拔的编码器和解码器。Spring Cloud为Feign增加了对Spring MVC注解的支持,还整合了Ribbon和Eureka来提供均衡负载的HTTP客户端实现。
开发准备
开发环境
- JDK:1.8
- SpringBoot:2.1.1.RELEASE
- SpringCloud:Finchley
注:不一定非要用上述的版本,可以根据情况进行相应的调整。需要注意的是SpringBoot2.x以后,jdk的版本必须是1.8以上!
确认了开发环境之后,我们再来添加相关的pom依赖。
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> </dependencies>注: 基于SpringBoot1.x以上SpringCloud是Dalston版本的eureka 依赖是 <artifactId>spring-cloud-starter-eureka</artifactId>,feign 依赖是 <artifactId>spring-cloud-starter-feign</artifactId> ,少了个 netflix 。SpringCloud的版本命名方式是通过伦敦的地方来命名的,版本顺序是根据首字母的顺序来的。
SpringCloud Feign 示例
服务端
首先建立一个springcloud-feign-eureka服务的工程,用于做注册中心。配置和之前的基本一样。application.properties添加如下的配置:
配置信息:
spring.application.name=springcloud-feign-eureka-server server.port=8001 eureka.client.register-with-eureka=false eureka.client.fetch-registry=false eureka.client.serviceUrl.defaultZone=http://localhost:8001/eureka/配置说明:
- spring.application.name: 这个是指定服务名称。
- server.port:服务指定的端口。
- eureka.client.register-with-eureka:表示是否将自己注册到Eureka Server,默认是true。
- eureka.client.fetch-registry:表示是否从Eureka Server获取注册信息,默认为true。
- eureka.client.serviceUrl.defaultZone: 这个是设置与Eureka Server交互的地址,客户端的查询服务和注册服务都需要依赖这个地址。
完成配置信息的添加后,我们再来看代码如何实现。
在服务端这边只需要在SpringBoot启动类添加@EnableEurekaServer注解就可以了,该注解表示此服务是一个服务注册中心服务。
代码示例:
@EnableEurekaServer @SpringBootApplication public class FeignEurekaApplication { public static void main(String[] args) { SpringApplication.run(FeignEurekaApplication.class, args); System.out.println("feign注册中心服务启动..."); } } 客户端
这里我们定义两个消费者,
