首页 > 其他分享 >服务远程调用-Open Feign-微服务核心组件【分布式微服务笔记04】

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

时间:2024-07-22 11:32:37浏览次数:14  
标签:Feign 调用 服务 04 OpenFeign 日志 id

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

服务远程调用-Open Feign

  • Open Feign最大的价值就是,在不同的微服务中可以相互调用对方的接口

基本介绍

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

Feign和Open Feign的区别

  • OpenFeign 就是在Feign 基础上做了加强, 有些程序员为了方便,说Feign就是指的OpenFeign
Feign
  1. Feign是Spring Cloud组件中的一个轻量级RESTful的HTTP服务客户端
  2. Feign内置了Ribbon,用来做客户端负载均衡,去调用服务注册中心的服务。
  3. Feign的使用方式是:使用Feign的注解定义接口,调用服务注册中心的服务
  4. Feign本身不支持Spring MVC的注解,它有一套自己的注解
OpenFeign
  1. OpenFeign是Spring Cloud 在Feign的基础上支持了Spring MVC的注解,如@RequesMapping等等。
  2. OpenFeign的@FeignClient可以解析SpringMVC的@RequestMapping注解下的接口
  3. 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 远程调用成功

OpenFeign日志配置

Feign 提供了日志打印功能,可以通过配置来调整日志级别,从而对Feign 接口的调用情况进行监控和输出

日志级别 描述
NONE 默认的,不显示任何日志
BASIC 仅记录请求方法、URL、响应状态码及执行时间
HEADERS 除了BASIC中定义的信息之外,还有请求和响应的头信息
FULL 除了HEADERS中定义的信息之外,还有请求和响应的正文及元数据

常见的日志输出级别有5 种,分别是error、warn、info、debug、trace

日志输出级别 描述
error 错误日志,指比较严重的错误,对正常业务有影响,需要运维配置监控的
warn 警告日志,一般的错误,对业务影响不大,但是需要开发关注
info 信息日志,记录排查问题的关键信息,如调用时间、出参入参等等
debug 用于开发DEBUG 的,关键逻辑里面的运行时数据
trace 最详细的信息,一般这些信息只记录到日志文件中

OpenFeign日志配置示例:

  1. 编写配置类

    @Configuration
    public class OpenFeignConfig {
    
        @Bean
        public Logger.Level loggerLevel(){
            return Logger.Level.FULL;
        }
    }
    
  2. 编写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 
    
  3. 访问接口 http://localhost/member/consumer/openfeign/get/1 OpenFeign日志配置 成功

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

标签:Feign,调用,服务,04,OpenFeign,日志,id
From: https://www.cnblogs.com/zydevelop/p/18307732/zy_springcloud04

相关文章

  • 如何在不停机的情况下向现有的 PostgreSQL 级联复制添加额外的从属服务器?
    步骤1:将第3个从属信息放在从属2的pg_hba.conf中,如果这里没有recovery.conf文件,请立即创建catrecovery.confstandby_mode='on'primary_conninfo='host=192.168.2.3port=5432user=postgrespassword=postgres'#restore_command='cp/archive/%f"%p&......
  • 数据结构与算法从淬体到元婴day04之堆
    堆堆的定义堆是一种特殊的完全二叉树结构,其每个节点的值都遵循一定的堆属性。堆在物理上是通过数组实现的,逻辑上则表现为树形结构。堆的性质堆总是一棵完全二叉树。堆中某个节点的值总是不大于(最大堆)或不小于(最小堆)其父节点的值。将根节点最大的堆称为最大堆或大根堆,根节点......
  • 基于springboot的助农服务平台
    基于springboot的助农服务app介绍2024届软件工程毕业设计 该项目是基于springboot的助农App的设计及实现,主要实现了管理员,用户,商家三个端的设计,其中主要实现的功能有产品模块,订单模块,购物车模块,以及相关联的管理模块,秒杀等,帮助农民出售农作物,提高农业水平的发展,提高农民的收入,......
  • Nessus Professional 10.7.5 Auto Installer for Ubuntu 24.04 (updated Jul 2024)
    NessusProfessional10.7.5AutoInstallerforUbuntu24.04(updatedJul2024)发布Nessus试用版自动化安装程序,支持macOSSonoma、RHEL9和Ubuntu24.04请访问原文链接:https://sysin.org/blog/nessus-auto-install-for-ubuntu/,查看最新版。原创作品,转载请保留出处。作......
  • 0204-可移动相机
    环境Time2022-11-17WSL-Ubuntu22.04Rust1.65.0前言说明参考:https://raytracing.github.io/books/RayTracingInOneWeekend.html目标将相机的位置和远近参数化,可以调节相机的位置。叉乘//向量的叉乘pubfncross(self,other:Vector3)->Vector3{Vector3{......
  • Facebook在Linux服务器上使用selenium登录
    我已经想到了这个项目。其中一部分是登录Facebook帐户。这段代码在我的本地机器(windows)和本地服务器(ubuntu)上完美运行,但当我在在线Linux服务器上运行它时它不起作用。deflogin_facebook(driver,email,password):try:logging.info("LoggingintoFacebook......
  • 微服务设计原则——高性能:锁
    文章目录1.锁的问题2.无锁2.1串行无锁2.2无锁数据结构3.减少锁竞争参考文献1.锁的问题高性能系统中使用锁,往往带来的坏处要大于好处。并发编程中,锁带解决了安全问题,同时也带来了性能问题,因为锁让并发处理变成了串行操作,所以如无必要,尽量不要显式使用锁。锁和并......
  • Linux 下部署 syncthing 中继服务器
    来自......
  • 封禁 NetBIOS Session Service 和 SMB 服务(特别是旧版本的SMB)可能是出于安全性考虑。
    封禁NetBIOSSessionService和SMB服务(特别是旧版本的SMB)可能是出于安全性考虑。这两种服务在过去的实现中存在一些安全漏洞和风险,特别是在现代网络环境中,这些风险可能会被利用来进行攻击或者未经授权的访问。下面是一些常见的安全考虑:中间人攻击:未加密的NetBIOS和旧版本......
  • P2704 [NOI2001] 炮兵阵地
    原题链接题解经典的状压dpcode#include<bits/stdc++.h>#definelllonglong#definelowbit(x)((x)&(-x))usingnamespacestd;intsit[105];intdp[505][505][4];boolcheck(intx){intx1=(x>>1)>>1;intx2=(x<<1)<<1;......