大号在练葵花宝典 发表于 2024-7-22 10:43:38

服务远程调用-Open Feign-微服务焦点组件【分布式微服务笔记04】

服务远程调用-Open Feign-微服务焦点组件【分布式微服务笔记04】

服务远程调用-Open Feign


[*]Open Feign最大的价值就是,在差别的微服务中可以相互调用对方的接口
基本先容


[*]OpenFeign 是个声明式WebService 客户端,使用OpenFeign 让编写Web Service 客户端更简单
[*]使用方法: 界说一个服务接口然后在上面添加注解
[*]OpenFeign 也支持可拔插式的编码器和解码器。
[*]Spring Cloud 对OpenFeign 进行了封装使其支持了Spring MVC 标准注解和HttpMessageConverters【消息转换器】
[*]OpenFeign 可以与Eureka 和Ribbon 组合使用以支持负载均衡
Feign和Open Feign的区别


[*]OpenFeign 就是在Feign 基础上做了加强, 有些步伐员为了方便,说Feign就是指的OpenFeign
Feign


[*]Feign是Spring Cloud组件中的一个轻量级RESTful的HTTP服务客户端
[*]Feign内置了Ribbon,用来做客户端负载均衡,去调用服务注册中心的服务。
[*]Feign的使用方式是:使用Feign的注解界说接口,调用服务注册中心的服务
[*]Feign本身不支持Spring MVC的注解,它有一套自己的注解
OpenFeign


[*]OpenFeign是Spring Cloud 在Feign的基础上支持了Spring MVC的注解,如@RequesMapping等等。
[*]OpenFeign的@FeignClient可以解析SpringMVC的@RequestMapping注解下的接口
[*]OpenFeign通过动态署理的方式产生实现类,实现类中做负载均衡并调用其他服务
OpenFeign代码实现

1.添加依赖
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>2.开发OpenFeign接口
@Component
@FeignClient(value = "MEMBER-SERVICE-PROVIDER") //指定调用的服务是哪个【可以是集群】
public interface MemberFeignService {

    //定义方法【就是远程调用的接口】
    /*
    解析:
      1.远程调用的方式 : get
      2.远程调用的url :http://MEMBER-SERVICE-PROVIDER/member/get/{id}
      3.MEMBER-SERVICE-PROVIDER就是服务提供方在eureka-server注册的服务【远程对接时MEMBER-SERVICE-PROVIDER会由eureka来获取 】
      4.openfeign 会根据负载均衡来决定调用集群中的哪个【默认时轮询】
   */
    @GetMapping("/member/get/{id}") //这里就是提供方的接口
    Result getMemberById(@PathVariable("id") Long id);
}

[*]MEMBER-SERVICE-PROVIDER 就是服务提供方在eureka-server 注册的服务,@FeignClient(value = "MEMBER-SERVICE-PROVIDER") 用于指定调用的服务是哪个【可以是集群】
3.编写主启动类
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients//启动 OpenFeignClient
public class MemberConsumerOpenfeignApplication {
    public static void main(String[] args) {
      SpringApplication.run(MemberConsumerOpenfeignApplication.class, args);
    }
}4.编写Controller
@RestController
@RequestMapping("/member/consumer/openfeign")
public class MemberConsummerFeignController {

    @Autowired
    private MemberFeignService memberFeignService;

    @GetMapping("/get/{id}")
    public Result getMemberById(@PathVariable("id") Long id){
      return memberFeignService.getMemberById(id);
    }
}5.访问接口 http://localhost/member/consumer/openfeign/get/1 远程调用成功
https://img2024.cnblogs.com/blog/3419314/202407/3419314-20240717162923018-1405331362.png
OpenFeign日记设置

Feign 提供了日记打印功能,可以通过设置来调解日记级别,从而对Feign 接口的调用环境进行监控和输出
日记级别描述NONE默认的,不显示任何日记BASIC仅记载哀求方法、URL、响应状态码及执行时间HEADERS除了BASIC中界说的信息之外,还有哀求和响应的头信息FULL除了HEADERS中界说的信息之外,还有哀求和响应的正文及元数据常见的日记输出级别有5 种,分别是error、warn、info、debug、trace
日记输出级别描述error错误日记,指比较严峻的错误,对正常业务有影响,需要运维设置监控的warn警告日记,一般的错误,对业务影响不大,但是需要开发关注info信息日记,记载排查题目的关键信息,如调用时间、出参入参等等debug用于开发DEBUG 的,关键逻辑里面的运行时数据trace最详细的信息,一般这些信息只记载到日记文件中OpenFeign日记设置示例:

[*]编写设置类
@Configuration
public class OpenFeignConfig {

    @Bean
    public Logger.Level loggerLevel(){
      return Logger.Level.FULL;
    }
}
[*]编写application.yml
server:
port: 80

spring:
application:
    name: e-commerce-consumer-openfeign-80 #配置应用的名称

#配置eureka-client [略]......


# OpenFeign日志配置
logging:
level:
    #这里com.zy88.springcloud.service.MemberFeignService 表示对应的接口;debug 表示日志级别
    com.zy88.springcloud.service.MemberFeignService: debug
[*]访问接口 http://localhost/member/consumer/openfeign/get/1 OpenFeign日记设置 成功
https://img2024.cnblogs.com/blog/3419314/202407/3419314-20240717162949321-323156586.png
OpenFeign调用超时


[*]OpenFeign 默认超时时间1 秒钟,即等待返回效果1 秒
修改默认超时时间

在application.yml修改即可
server:
port: 80

spring:
application:
    name: e-commerce-consumer-openfeign-80 #配置应用的名称

#配置eureka-client【略】......

# 修改默认超时时间
ribbon:
#设置feign 客户端超时时间(openFeign 默认支持ribbon)
#ReadTimeout: 8000 表示 指的是建立连接后从服务器读取到可用资源所用的时间【时间单位是毫秒】
ReadTimeout: 8000
#指的是建立连接所用的时间,适用于网络状况正常的情况下,
#两端连接所用的时间
ConnectTimeout: 8000
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 服务远程调用-Open Feign-微服务焦点组件【分布式微服务笔记04】