个人理解OpenFeign(内置Ribbon)同Ribbon +RestTemplate 一样实现获取服务+各服务间的调用+负载均衡
Feign 和 OpenFeign 区别
1OpenFeign
是
Spring Cloud
在
Feign
的基础上
支持了
Spring MVC
的注解,如
@RequesMapping
等等。
2
OpenFeign
的
@FeignClient
可以解析
SpringMVC
的
@RequestMapping
注解下的接口
3
OpenFeign
通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务
通过 OpenFeigen 实现远程调用步骤
1.创建服务消费模块
2.修改 pom.xml
<!--
引入
openfeign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>等其他依赖
3.创建 application.yml 内容如下:
server
:
port
:
80
spring
:
application
:
name: member-service-consumer-openfeign
#eureka
客户端配置
eureka
:
client
:
register-with-eureka
:
true
#
将自己注册到
EurekaServer
fetchRegistry
:
true
#
配置从
EurekaServer
抓取其它服务注册信息
service-url
:
defaultZone
:
http://eureka9001.com:9001/eureka,
http://eureka9002.com:9002/eureka
(注册到哪个Eureka Server)
4. 创 建 主 启 动 类
@EnableEurekaClient(启用Eureka)
@EnableFeignClients(启用openFeign)
5.创建Service接口
注意:这里是
OpenFeign
的核心
@Component
//
这里
MEMBER-SERVICE-PROVIDER
就是
Eureka Server
服务提供方注册的名称
@FeignClient(value = "MEMBER-SERVICE-PROVIDER")
public interface
MemberFeignService
{
/**
*
* 1.
远程调用的方式为
get
*
2. 远程调用的 url 为 http://MEMBER-SERVICE-PROVIDER/member/get/{id}
以该拼接的地址请求服务提供方
@FeignClient(value)+ @GetMapping(value)
* 3. MEMBER-SERVICE-PROVIDER
是 注册中心服务
* member-service-provider:10000/10002
* 4.
会根据
OpenFeign
的均衡算法来决定是调用
10000
还是
10002
*/
//下面两行代码直接从服务方copy下来
@GetMapping(value = "/member/get/{id}")
public
Result
<
Member
>
getMembertById
(
@PathVariable
(
"id"
)
Long
id);
}
6.创建controller
@RestController
public class
MemberConsumerFeignController
{
@Resource
private
MemberFeignService
memberFeignService
;
@GetMapping
(value =
"/member/consumer/openfeign/get/{id}"
)
public
Result
<
Member
>
getMemberById
(
@PathVariable
(
"id"
)
Long
id){
return
memberFeignService
.getMembertById(id);
}
}