SpringCloud-声明式服务调用 Feign
Fegin 是一个声明式的 web 服务客户端,它使得编写 web 服务客户端变得更加容易。使用 Fegin 创建一个接口并对它进行注解。它具有可插拔的注解支持包括 Feign 注解与 JAX-RS 注解,Feign 还支持可插拔的编码器与解码器,Spring Cloud 增加了对 Spring MVC 的注解,Spring Web 默认使用了 HttpMessageConverters。Fegin 还可以集成 Ribbon 和 Hystrix 来提供负载均衡和网络断路器的功能。
本篇将使用 Fegin + eureka client 来完成服务发现和调用。
环境准备
类别 | 值 |
---|---|
JDK |
1.8.0_162 |
SOFABoot/SpringBoot |
3.0.0/2.0.x.RELEASE |
SpringCloud |
Finchley.RC1 |
IDE |
IDEA |
工程背景
本节将会创建一个 sofa-eureka-consumer-feign 工程,使用 Feign 提供的 web 客户端来访问 sofa-eureka-provider 发布的服务。同时也基于此工程验证基于 Feign 实现的负载均衡。
新建 sofa-eureka-consumer-feign
本工程继续使用《SpringCloud-Eureka 服务注册》中的父工程来构建。
右击 sofa-eureka-parent 父工程 -> New -> Module,这里选择 Maven 工程;
- artifactId:sofa-eureka-consumer-feign
修改pom文件
1 | <parent> |
修改配置文件
1 | server.port=8888 |
启动类
这里需要添加 @EnableEurekaClient 和 @EnableFeignClients 两个注解。
1 |
|
资源类
- com.alipay.sofa.cloud.service 包下新建 HelloSOFAService
1 |
|
- com.alipay.sofa.cloud.controller 包下新建 FeignController
1 |
|
启动 & 验证
启动当前工程,在此之前请以此启动 注册中心 sofa-eureka-server-center 和 sofa-eureka-provider 两个工程。
注:这里我启动了两个 provider 工程
浏览器输入:http:localhost:8888/hello,观察到浏览器中依次展示:
1 | Hello SOFA! Now Port is 8081 And hostname is HelloSOFAService |
这里可以看待 通过 feign 提供的客户端能力已经访问到了远程服务,由于 feign 集成了 ribbon 因此也就默认实现了负载均衡的能力。从结果来看,默认的负载均衡策略是轮询。
SpringCloud-声明式服务调用 Feign
http://www.glmapper.com/2018/12/31/springcloud/spring-cloud-feign-project/