OpenFeign底层使用Ribbon做的负载均衡
Feign是什么?
Feign是一个声明式的模板化的Http客户端,其作用与RestTemplate类似,能够使用HTTP请求访问远程服务。可以理解为RestTemplate的一种简化方案。Open
Feign是Spring Cloud 基于Netflix Feign的基础上开发的声明式服务调用组件,支持Spring
MVC注解,可以像Spring Web一样使用HttpMessageConverters等。
OpenFeign组件
1.什么Feign组件
历史:Feign(Netflix)----> 维护状态 ----> 推出的了Springcloud OpenCloud(spring)
这两个组件现在在使用、特性、使用方式一致 简介:Rest Client:OpenFeign RestTemplate
作用一致都是一个http客户端
RestTemplate:spring 框架封装HttpClient对象
OpenFeign:伪HtppClient客户端对象 它可以使用服务间通信变得更加简单,Feign默认集成了Ribbon,实现请求 负载均衡。 使用:1.写一个接口 + 一个注解
2.调用服务代码 ,自动完成数据传递过程中对象转换
2.为什么使用OpenFeign
a.RestTemplate 使用问题
1.路径写死
2.不能自动转换响应结果为对应对象
3.必须集成ribbon实现负载均衡
b.openFeign组件
解决RestTemplate实现服务间通信所有问题
3.使用OpenFeign
1.创建两个独立springboot应用,并注册到服务注册中心 consul
2.引入服务注册中心依赖
<!-- consul依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
<version>2.2.6.RELEASE</version>
</dependency>
<!-- 健康检查依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
3.修改配置文件
server.port=9999
spring.application.name=PRODUCT
#想注册中心consul server服务注册地址
spring.cloud.consul.host=localhost
spring.cloud.consul.port=8500
4.入口类加入注解
SpringBootApplication
@EnableDiscoveryClient //开启服务注册中心客户端注解
public class CategoryApplication {}
5.使用OpenFeign进行调用
a.在服务调用方法引入OpenFeign依赖
<!-- OpenFeign依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
b.在服务调用方入口类加入注解 开启Feign调用支持
SpringBootApplication
@EnableDiscoveryClient //开启服务注册中心客户端注解
@EnableFeignClients //开启openfein客户端调用
public class CategoryApplication {}
c.在调用方,开发被调用方接口和实现的方法
@FeignClient(value = "PRODUCT") //调用商品服务接口
public interface ProductClient {
@GetMapping(value = "/product") //调用商品服务
String product();
}
d.在controller中注入被调用方的接口,并使用
@RestController
public class CategoryController {
@Autowired
private ProductClient productClient;
@GetMapping(value = "/category")
public String category(){
String product = productClient.product();
return "从种类中访问了商品服务"+product;
}
}
服务间通信之参数传递和响应处理
1.微服务架构中服务间通信手段?
http协议:springcloud 两种方式
a.RestTemplate + Ribbon
b.OpenFeign(推荐)
2.服务间通信,参数传递和响应处理 参数传递:
a.传递零散类型参数
b.传递对象类型
c.数组或集合类型参数
3.零散类型参数传递【由于penFeign是伪HttpClient对象,所以在传递参数时候需要明确指定该参数的类型,所以需要使用注解来传参】
a. queryString方式传递参数: ?name=xiaochen 注意:在penFeign接口声明中必须给参数加入注解 @RequestParamb.路径传递参数:url/xiaochen/23 注意:在penFeign接口声明中必须给参数加入注解 @PathVariable
c.对象类型参数传递 form表单方式 application/json方式: 注意:使用json方式在penFeign接口声明中必须给参数加入注解 @RequestBody