OpenFeign声明式远程调用声明式REST客户端OpenFeign集成了负载均衡
1、声明式REST客户端远程调用和编程式REST客户端(RestTemplate)的区别:
编程式REST客户端(RestTemplate)调用结构图:
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
@EnableFeignClients/*开启feign功能*/
在远程调用的接口上加上FeignClient的注解然后通过GetMapping,PostMapping,PutMapping.....等,去发送请求:
value: 如果第三方接口没有提供注册名称就随便写最好是有含义的名称,
查看第三方接口要接受或者发送信息的类型为post,get,put或者其他请求方式,写上其他的请求路径,再写上接口要接受的参数,
谁调用这个接口并且将要传到第三方的数据传到第三方数据准确的情况下
OpenFeign负载均衡是先去注册中心去获取所有服务的地址然后通过负载均衡算法去随机获取一个地址去发请求
而服务端负载均衡是通过请求到服务端通过服务端去随机分配地址去发送请求的
com.stguigu.order.feign: debug
Logger.Level feignLoggerLevel() {
连接超时:是在服务之间建立连接时长时间或者在规定时间内没有连接成功出现的连接超时
读取超时:是发送请求成功在服务处理业务时没有按时返回数据所出现的读取超时
定时超时可以单独为客户端设置超时时间也可以设置全局的超时时间,如果有单独设置的超时时间就走单独设置的超时时间,如果没有就走全局的
#服务客户端名称为service-product单独设置的超时
远程调用超时失败后,还可以进行多次尝试,如果某次成功返回ok,如果多次依然失败则结束调用,返回错误
试用重试机制可以在配置类中去配置重试机制,用Retryer来配置重试机制,调用Retryer的Default来进行重试机制:
Retryer的Default间隔策略还可以自定义间隔时间:
Retryer.Default(间隔时间,最大间隔时间,重试次数)p;
请求服务通过OpenFeign发送请求我们可以给请求加上请求拦截器通过RequestInterceptor加上比如X-Token:xxx
发送给远程服务中的服务然后远程的服务就可以拿到X-Token:xxx然后去做处理。
我们还可以通过远程服务加上响应拦截器然后通过拦截器给请求头加上内容返回给请求。
1、先创建一个interceptor目录,下面存放拦截器的类
兜底返回数据是在远程调用中穿线调用超时或者错误中原本会返回错误信息,而现在加了兜底数据在
请求超时时就不会返回错误信息而是返回我们规定好的数据也就是兜底数据。
1、先在feign目录中创建一个存放兜底数据的目录fallback
2、在fallback中创建存放兜底数据的类要将它存放到容器中加上@Component
3、用@FeignClient的fallbakc属性实现连接超时的兜底数据返回的实现
4、因为要实现fallback要整合Sentienl就要导入Sentienl的依赖:
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>