当前位置:主页 > java教程 > SpringCloud Feign

SpringCloud OpenFeign概述与使用教程

发布:2023-04-12 15:40:01 59


给网友们整理相关的编程文章,网友蒋瑞彩根据主题投稿了本篇教程内容,涉及到SpringCloud、OpenFeign、SpringCloud、OpenFeign使用、SpringCloud Feign相关内容,已被606网友关注,如果对知识点想更进一步了解可以在下方电子资料中获取。

SpringCloud Feign

Feign

它是声明性(注解)web服务客户端

  • 要使用Feign,需创建一个接口并对其进行注解
  • 它是一个远程调用的组件(接口,注解)http调用的

Feign集成了ribbon ribbon里集成了eureka

使用

与上篇文章ribbon的案例相似,也是客户端互相访问、互相帮助

实现:两个商家,一个中介,一个提供商,用户访问中介的接口,中介向提供商发送请求去制作

同样是创建两个client,之前创过就不走流程了

我这里创建了一个order-service-01和一个user-service-02

order-service-01: 提供商

配置文件配置:

server:
  port: 8080
spring:
  application:
    name: order-service
eureka:
  client:
    service-url:
      defaultZone: 你的远程eureka地址

启动类开启客户端

@EnableEurekaClient

编写一个出订单的controller

@RestController
public class OrderControll {
    @GetMapping("doOrder")
    public String doOrder(){
        return "正在制作面条";
    }
}

启动即可

user-service-02: 中介

关键依赖:

<!--        feign依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

配置文件application.yml:

server:
  port: 8081
spring:
  application:
    name: user-service
eureka:
  client:
    service-url:
      defaultZone: 你的远程eureka地址

启动类开启服务

@EnableFeignClients:开启feign

@EnableDiscoveryClient
@EnableFeignClients

关键:创建接口类UserOrderfeign

需要调用提供商(order-service)的doOrder的接口即向下方代码编写即可

/**
 * 下方注解:
 * value就是提供者的应用名称
 */
@FeignClient(value="order-service")
public interface UserOrderfeign {
    /**
     * 你需要调用哪个controller就写它的方法签名
     * @return
     */
    @GetMapping("doOrder")
    String doOrder();
}

编写controller实现类

直接引入编写的userOrderfeign即可直接调用提供商的接口

@RestController
public class UserControll {
    @Autowired
    public UserOrderfeign userOrderfeign;
    @GetMapping("userDoOrder")
    public String userDoOrder(){
        System.out.println("来客人了...");
        //发起远程调用
        String str=userOrderfeign.doOrder();
        return str;
    }
}

运行最终访问localhost:8081/userDoOrder页面就会显示提供商返回的内容了~

传参

需确保参数列表一致,返回值一致,方法签名一致

  • URL传参:参数列表使用@PathVariable
  • GET传参:参数列表使用@RequestParam
  • POST传参:参数列表使用@RequestParam或者Requestbody

基于上方案例继续使用

order-service控制器编写方法

URL拼接传参

//url拼接传参
    @GetMapping("testUrl/{name}/and/{age}")
    public String testUrl(@PathVariable("name")String name,@PathVariable("age")Integer age){
        System.out.println(name+":"+age);
        return "ok";
    }

GET传参

 //url传递一个参数
    @GetMapping("oneParam")
    public String oneParam(@RequestParam String name){
        System.out.println(name);
        return "ok";
    }
    //url传递多个参数
    @GetMapping("twoParam")
    public String twoParam(@RequestParam(required = false) String name,@RequestParam(required = false)Integer age){
        System.out.println(name);
        System.out.println(age);
        return "ok";
    }

POST传参

编写实体类order

这里用到了lambok实现自动添加有参无参set、get等方法

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Order {
    private Integer id;
    private String name;
    private Double price;
    private Date time;
}
//Post请求传递一个对象
    @PostMapping("oneObj")
    public String oneObj(@RequestBody Order order){
        System.out.println(order);
        return "ok";
    }
    //Post请求传递一个对象一个参数
    @PostMapping("oneObjOneParam")
    public String oneObjOneParam(@RequestBody Order order,@RequestParam("name")String name){
        System.out.println(order);
        System.out.println(name);
        return "ok";
    }

调用

user-service的feign接口中编写控制类的传参方法

/url拼接传参
    @GetMapping("testUrl/{name}/and/{age}")
    public String testUrl(@PathVariable("name")String name, @PathVariable("age")Integer age);
    //url传递一个参数
    @GetMapping("oneParam")
    public String oneParam(@RequestParam String name);
    //url传递多个参数
    @GetMapping("twoParam")
    public String twoParam(@RequestParam(required = false) String name,@RequestParam(required = false)Integer age);
    //Post请求传递一个对象
    @PostMapping("oneObj")
    public String oneObj(@RequestBody Order order);
    //Post请求传递一个对象一个参数
    @PostMapping("oneObjOneParam")
    public String oneObjOneParam(@RequestBody Order order,@RequestParam("name")String name);

user-service控制器中编写方法调用

 @GetMapping("testParam")
    public String testParam(){
        String zt = userOrderFeign.testUrl("zt", 21);
        System.out.println(zt);
        String xzl = userOrderFeign.oneParam("xzl");
        System.out.println(xzl);
        String wf = userOrderFeign.twoParam("wf", 22);
        System.out.println(wf);
        Order order= Order.builder()
                     .name("牛排")
                     .price(188D)
                     .time(new Date())
                     .id(1)
                     .build();
        String s = userOrderFeign.oneObj(order);
        System.out.println(s);
        String param = userOrderFeign.oneObjOneParam(order, "dqf");
        System.out.println(param);
        return "ok";
    }

以上即可实现传参~

拓展

feign的默认等待时间是1s,超过1s就直接报错超时

配置超时、连接时间

Tip:feign只是封装了远程调用的功能 底层还是ribbon 所以需要修改ribbon的时间

#feign只是封装了远程调用的功能  底层还是ribbon 所以需要修改ribbon的时间
ribbon:
  ReadTimeout: 3000 #3s超时时间
  ConnectTimeout: 3000 #连接服务的超时时间

日志打印

编写日志功能有利于错误排查

日志级别

NONE:默认的,不显示任何日志;

BASIC:仅记录请求方法、URL、响应状态码及执行时间;

HEACIERS:除了BASIC中定义的信息之外,还有请求和响应的头信息

FULL:除了HEADERS中定义的信息之外,还有请求和响应的正文及元数据。

在启动类application中编写

/**
     * 打印日志信息
     */
    @Bean
    public Logger.Level level(){
        return Logger.Level.FULL;
    }

配置文件中yml开启日志客户端

logging:
  level:
    com.pengke.userservice02.feign.UserOrderfeign: debug # 需要打印请求该接口的日志...

level下是feign接口的路径

这样即可实现用户访问该接口实现对应的日志打印相关信息

到此这篇关于SpringCloud OpenFeign概述与使用的文章就介绍到这了,更多相关SpringCloud Feign内容请搜索码农之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持码农之家!


相关文章

  • SpringCloud微服务中跨域配置的方法详解

    发布:2023-04-17

    在使用SpringCloud实现微服务时,经常会碰到前端页面访问多个二级域名的情况,跨域是首先要解决的问题。解决这个问题,可以从两方面入手,一种方案是在微服务各自的业务模块中实现,即在SpringBoot层实现,另外一种方案就是在Gateway层实现


  • SpringCloud Feign客户端使用流程

    发布:2023-04-18

    在springcloud中,openfeign是取代了feign作为负载均衡组件的,feign最早是netflix提供的,他是一个轻量级的支持RESTful的http服务调用框架,内置了ribbon,而ribbon可以提供负载均衡机制,因此feign可以作为一个负载均衡的远程服务调用框架使用


  • SpringCloud中Feign声明式服务调用的方法详解

    发布:2020-01-20

    这篇文章主要介绍了SpringCloud实战之Feign声明式服务调用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧


  • SpringCloud OpenFeign基本介绍与实现示例

    发布:2023-03-28

    OpenFeign源于Netflix的Feign,是http通信的客户端。屏蔽了网络通信的细节,直接面向接口的方式开发,让开发者感知不到网络通信细节。所有远程调用,都像调用本地方法一样完成


  • SpringCloud Config使用本地仓库及map注入

    发布:2021-05-07

    这篇文章主要介绍了SpringCloud Config使用本地仓库及map注入,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下


  • SpringCloud Netflix Ribbon源码解析(推荐)

    SpringCloud Netflix Ribbon源码解析(推荐)

    发布:2022-10-21

    给大家整理一篇关于SpringCloud的教程,这篇文章主要介绍了SpringCloud Netflix Ribbon源码解析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下


  • spring cloud zuul修改请求url的具体方法

    发布:2021-06-01

    这篇文章主要给大家介绍了关于spring cloud zuul修改请求url的方法,文中通过示例代码介绍的非常详细,对大家学习或者使用spring cloud具有一定的参考学习价值,需要的朋友们下面来一起看看吧。


  • SpringCloud中Eureka的配置及使用讲解

    发布:2023-03-14

    Eureka 服务注册中心,主要用于提供服务注册功能,当微服务启动时,会将自己的服务注册到 Eureka Server,这篇文章主要介绍了SpringCloud中Eureka的配置及详细使用,需要的朋友可以参考下


网友讨论