OpenFeign声明式远程调用声明式REST客户端OpenFeign集成了负载均衡

1、声明式REST客户端远程调用和编程式REST客户端(RestTemplate)的区别:

QQ_1743410532398.png

QQ_1743410549413.png

编程式REST客户端(RestTemplate)调用结构图:

QQ_1743410782831.png

声明式REST客户端远程调用结构图:

image.png

2、OpenFeign的远程调用流程:

1、导入openfeign远程调用依赖:

<!--openfeign远程调用-->

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-openfeign</artifactId>

<version>4.0.0</version>

</dependency>

 

2、在启动类上加上openfeign远程调用的注解:

@EnableFeignClients/*开启feign功能*/

3、创建feign专门存放远程调用的接口的目录:

在远程调用的接口上加上FeignClient的注解然后通过GetMapping,PostMapping,PutMapping.....等,去发送请求:

@FeignClient("服务名称")

QQ_1743411976986.png

 

3、OpenFeign调用第三方接口

用FeignClient注解去调用第三方接口,

value: 如果第三方接口没有提供注册名称就随便写最好是有含义的名称,

url:为第三方的地址信息

查看第三方接口要接受或者发送信息的类型为post,get,put或者其他请求方式,写上其他的请求路径,再写上接口要接受的参数,

谁调用这个接口并且将要传到第三方的数据传到第三方数据准确的情况下

,那第三方就会将返回的数据返回

QQ_1743419762656.png

客户端负载均衡与服务端负载均衡区别

OpenFeign负载均衡是先去注册中心去获取所有服务的地址然后通过负载均衡算法去随机获取一个地址去发请求

而服务端负载均衡是通过请求到服务端通过服务端去随机分配地址去发送请求的

4、进阶配置——日志

1、先去配置文件配置:

logging:

level:

com.stguigu.order.feign: debug

2、再去配置类中配置:

@Bean

Logger.Level feignLoggerLevel() {

return Logger.Level.FULL;

}

5、进阶用法——超时控制

连接超时:是在服务之间建立连接时长时间或者在规定时间内没有连接成功出现的连接超时

读取超时:是发送请求成功在服务处理业务时没有按时返回数据所出现的读取超时

 

image.png

配置定时超时:

定时超时可以单独为客户端设置超时时间也可以设置全局的超时时间,如果有单独设置的超时时间就走单独设置的超时时间,如果没有就走全局的

spring:

cloud:

openfeign:

client:

config:

#设置全局的超时

default:

#全局超时

connect-timeout: 5000

read-timeout: 5000

#服务客户端名称为service-product单独设置的超时

service-product:

#连接超时

connect-timeout: 5000

#读取超时

read-timeout: 5000

6、进阶用法——重试机制

远程调用超时失败后,还可以进行多次尝试,如果某次成功返回ok,如果多次依然失败则结束调用,返回错误

 

试用重试机制可以在配置类中去配置重试机制,用Retryer来配置重试机制,调用Retryer的Default来进行重试机制:

Retryer的Default间隔策略默认的间隔时间:

image.png

Retryer的Default间隔策略还可以自定义间隔时间:

Retryer.Default(间隔时间,最大间隔时间,重试次数)p;

image.png

 

7、进阶用法——拦截器

请求服务通过OpenFeign发送请求我们可以给请求加上请求拦截器通过RequestInterceptor加上比如X-Token:xxx

发送给远程服务中的服务然后远程的服务就可以拿到X-Token:xxx然后去做处理。

我们还可以通过远程服务加上响应拦截器然后通过拦截器给请求头加上内容返回给请求。

image.png

实例用法:

1、先创建一个interceptor目录,下面存放拦截器的类

2、全局拦截器:

image.png

3、对某一个feign客户端进行配置

spring:

cloud:

openfeign:

client:

config:

service-product:

# 对某一个feign客户端进行拦截

request-interceptors:

- 要进行拦截的类的路径

8、进阶用法——Fallback兜底返回数据

兜底返回数据是在远程调用中穿线调用超时或者错误中原本会返回错误信息,而现在加了兜底数据在

请求超时时就不会返回错误信息而是返回我们规定好的数据也就是兜底数据。

image.png

实列:

1、先在feign目录中创建一个存放兜底数据的目录fallback

2、在fallback中创建存放兜底数据的类要将它存放到容器中加上@Component

image.png

3、用@FeignClient的fallbakc属性实现连接超时的兜底数据返回的实现

image.png

4、因为要实现fallback要整合Sentienl就要导入Sentienl的依赖:

<!--sentinel依赖-->

<dependency>

<groupId>com.alibaba.cloud</groupId>

<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>

</dependency>

5、在配置文件中配置:

#开启sentinel熔断

feign:

sentinel:

enabled: true

 

posted on 2025-04-06 15:14  爱开发的小橙  阅读(37)  评论(0)    收藏  举报