day07-OpenFeign-服务调用

这篇具有很好参考价值的文章主要介绍了day07-OpenFeign-服务调用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

SpringCloud OpenFeign-服务调用

1.OpenFeign介绍

https://github.com/spring-cloud/spring-cloud-openfeign

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

2.OpenFeign和Feign的区别

  • Feign
    1. Feign是SpringCloud组件中的一个轻量级RESTful的Http服务客户端
    2. Feign内置了Ribbon,用来做客户端负载均衡,去调用服务注册中心的服务
    3. Feign的使用方法是:使用Feign的注解定义接口,调用服务注册中心的服务
    4. Feign支持的注解和用法请参考官方文档:OpenFeign/feign: Feign makes writing java http clients easier (github.com)
    5. Feign本身不支持SpringMVC注解,它有一套自己的注解
    6. Feign集成了Ribbon、RestTemplate实现了负载均衡的执行Http调用,只不过对原有的方式(Ribbon+RestTemplate)进行了封装,开发者不必手动使用RestTemplate调服务,而是定义一个接口,在这个接口中标注一个注解即可完成服务调用,这样更加符合面向接口编程的宗旨,简化了开发。
  • OpenFeign
    1. OpenFeign是SpringCloud在Feign的基础上支持了SpringMVC的注解,如@RequestMapping等
    2. OpenFeign的@FeignClient可以解析SpringMVC的@RequestMapping注解下的接口
    3. OpenFeign通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务
  • 一句话:OpenFeign就是在Feign的基础上做了加强

3.OpenFeign应用实例

需求分析:如下,将原来使用Ribbon+RestTemplate实现:获取服务+远程调用+负载均衡,替换为使用OpenFeign来实现

day07-OpenFeign-服务调用

参考 member-service-consumer-80 创建 member-service-consumer-openfeign-80(步骤参考以前)

(1)创建新模块-member-service-consumer-openfeign-80

(2)修改 pom.xml:拷贝 member-service-consumer-80 的 pom.xml 依赖,并加入 openfeign-starter

<!-- 引入 openfeign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

(3)创建application.yml

server:
  port: 80

spring:
  application:
    name: e-commerce-consumer-openfeign-80
eureka:
  client:
    register-with-eureka: true #将自己注册到EurekaServer
    fetch-registry: true
    service-url:
      #将自己注册都哪个EurekaServer
      defaultZone: http://eureka9001.com:9001/eureka,http://eureka9002.com:9002/eureka

(4)创建主启动类

package com.li.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.openfeign.EnableFeignClients;

/**
 * @author 李
 * @version 1.0
 */
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients//启动OpenFeignClient
public class MemberConsumerOpenfeignApplication {
    public static void main(String[] args) {
        SpringApplication
                .run(MemberConsumerOpenfeignApplication.class,args);
    }
}

(5)创建接口,该接口最终是由OpenFeign来实现的(这里是OpenFeign的核心

  1. @FeignClient(value = "MEMBER-SERVICE-PROVIDER") 指定远程调用的地址别名
  2. 注意这里的 @GetMapping("/member/get/{id}") 指定要调用服务方的哪个方法,路径要和服务方的路径匹配。这是OpenFeign支持的SpringMVC的注解
package com.li.springcloud.service;

import com.li.springcloud.entity.Member;
import com.li.springcloud.utils.Result;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

/**
 * @author 李
 * @version 1.0
 */
@Component
//MEMBER-SERVICE-PROVIDER 是服务提供方[集群]注册到EurekaServer的别名
//根据这个key,可以在EurekaServer提供的注册信息中找到对应value,即真正的服务方地址:http://ip+port
@FeignClient(value = "MEMBER-SERVICE-PROVIDER")
public interface MemberFeignService {
    //定义方法-远程调用的接口

    /**
     * 1.远程调用的方式是get
     * 2.远程调用的url http://ip+port/member/get/{id}
     * 3.MEMBER-SERVICE-PROVIDER 是服务提供方[集群]注册到EurekaServer的别名
     * 4.OpenFeign会根据负载均衡来决定要掉用服务提供方的哪个节点(默认是轮询)
     * 5.OpenFeign的好处是支持了SpringMVC注解+使用接口解耦
     * @param id
     * @return
     */
    @GetMapping("/member/get/{id}")
    public Result<Member> getMemberById(@PathVariable("id") Integer id);
}

(6)创建MemberConsumerFeignController.java

这里的@GetMapping("/member/consumer/openfeign/get/{id}"),是消费方给浏览器的接口。

package com.li.springcloud.controller;

import com.li.springcloud.service.MemberFeignService;
import com.li.springcloud.utils.Result;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

/**
 * @author 李
 * @version 1.0
 */
@RestController
public class MemberConsumerFeignController {
    //装配MemberFeignService,
    //使用时该接口会对应一个代理对象,通过代理对象可以该接口的方法
    @Resource
    private MemberFeignService memberFeignService;

    @GetMapping("/member/consumer/openfeign/get/{id}")
    public Result getMemberById(@PathVariable("id") Integer id) {
        return memberFeignService.getMemberById(id);
    }
}

(7)启动EurekaServer,服务消费方,启动本模块主程序,在浏览器中访问:http://localhost:80/member/consumer/openfeign/get/5,可以看到查询数据成功,并且多次刷新会发现调用的接口是轮询的。

day07-OpenFeign-服务调用

注意事项和使用细节

  • OpenFeign使用特点是 微服务调用接口+@FeignClient,使用接口进行解耦

  • 接口中的@FeignClient(value = "MEMBER-SERVICE-PROVIDER"),这里的MEMBER-SERVICE-PROVIDER就是Eureka Server的服务提供方注册的别名,底层会通过这个别名(key)找到真正的地址(value)

  • 接口中的方法,value是不能乱写的,要根据服务消费方的url一致,否则无法访问到服务消费方对应的方法

    day07-OpenFeign-服务调用

4.OpenFeign的日志配置

4.1基本介绍

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

  2. 日志级别

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

4.2日志配置-应用实例

(1)在member-service-consumer-80创建OpenFeignConfig.java

package com.li.springcloud.config;

import feign.Logger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author 李
 * @version 1.0
 */
@Configuration
public class OpenFeignConfig {
    @Bean
    public Logger.Level loggerLevel() {
        return Logger.Level.FULL;
    }
}

(2)修改application.yml

logging:
  level:
    #对MemberFeignService接口调用过程打印信息-Debug
    com.li.springcloud.service.MemberFeignService: debug

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

error:错误日志,指比较严重的错误,对正常业务有影响,需要运维配置监控的;

warn:警告日志,一般的错误,对业务影响不大,但是需要开发关注;

info:信息日志,记录排查问题的关键信息,如调用时间、出参入参等等;

debug:用于开发 DEBUG 的,关键逻辑里面的运行时数据;

trace:最详细的信息,一般这些信息只记录到日志文件中。

(3)重启模块,浏览器访问消费模块,后台输出如下:

day07-OpenFeign-服务调用

5.OpenFeign超时时间配置

OpenFeign调用服务的默认时长是1秒钟,也就是如果超过1秒没连接上或者超过1秒没响应,那么会相应的报错。

day07-OpenFeign-服务调用

而实际会因为业务的不同出现超出1秒的情况,这时我们需要调整超时时间:

https://cloud.tencent.com/developer/article/1444369

Feign 的负载均衡底层用的就是 Ribbon。在application.yml中添加如下配置,超过8秒没连接上报连接超时,如果超过8秒没有响应,报请求超时文章来源地址https://www.toymoban.com/news/detail-410710.html

#全局配置
ribbon:
  # 设置feign客户端超时时间(OpenFeign默认支持ribbon),单位ms,默认超时时间为1s
  ReadTimeout: 8000
  #两端连接所用时间
  ConnectionTimeout: 8000

到了这里,关于day07-OpenFeign-服务调用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【springcloud 微服务】springcloud openfeign使用详解

    目录 一、前言 二、openfeign介绍 2.1 openfeign介绍 2.2  openfeign优势 三、Spring Cloud Alibaba整合OpenFeign

    2024年02月05日
    浏览(42)
  • 【springcloud微服务】springcloud整合openfeign使用详解

    目录 一、前言 二、微服务接口之间的调用问题 2.1 Httpclient 2.2 Okhttp 2.3 HttpURLConnection 2.

    2024年02月02日
    浏览(33)
  • SpringCloud 微服务系列——【服务间的通信方式、OpenFeign、Hystrix组件使用】

    ✅作者简介:2022年 博客新星 第八 。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏:SpringCloud 微服务学习专栏 ✨特色专栏:国学周更-心性养成之路 🥭本文内容:SpringCloud 微服

    2023年04月24日
    浏览(40)
  • 微服务之OpenFeign服务接口调用

    OpenFeign客户端是一个web声明式http远程调用工具,直接可以根据服务名称去注册中心拿到指定的服务IP集合,提供了接口和注解方式进行调用,内嵌集成了Ribbon本地负载均衡器。 Feign是一个 声明性web服务客户端 。它使编写web服务客户端变得更容易。 使用Feign创建一个接口并对

    2024年04月16日
    浏览(34)
  • 微服务远程调用openFeign整合

    ✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: 微服务探索之旅 ✨特色专栏: MySQL学习 🥭本文内容:微服务远程调用openFeign整合 🖥️个人小站 :个人博客,欢迎大家访问 📚个人知识库:

    2024年02月09日
    浏览(39)
  • 【springcloud微服务】Spring Cloud Alibaba 整合dubbo与openfeign

    dubbo与springcloud都可以单独作为微服务治理框架在生产中进行使用,但使用过springcloud的同学大概了解到,springcloud生态的相关组件这些年已经逐步停更,这就导致在服务架构演进过程中的迭代断层,以至于一些新的技术组件引入困难重重,于是在国内的市场上就有了升级版的

    2024年02月07日
    浏览(61)
  • SpringCloud微服务之间如何进行用户信息传递(涉及:Gateway、OpenFeign组件)

    在业务微服务中通过工具类获取当前用户信息 网关微服务(Gateway)往业务微服务传递用户信息 业务微服务之间通过OpenFeign传递用户信息 只要把上面两处打通,然后业务微服务在通过拦截器获取到用户信息,之后再将用户信息存在ThreadLocal中,这样我们就可以实现在业务微服

    2024年02月13日
    浏览(53)
  • Java之SpringCloud Alibaba【五】【微服务 Sentinel整合openfeign进行降级】

    Java之SpringCloud Alibaba【一】【Nacos一篇文章精通系列】 跳转 Java之SpringCloud Alibaba【二】【微服务调用组件Feign】 跳转 Java之SpringCloud Alibaba【三】【微服务Nacos-config配置中心】 跳转 Java之SpringCloud Alibaba【四】【微服务 Sentinel服务熔断】 跳转 Java之SpringCloud Alibaba【五】【微服务

    2024年02月11日
    浏览(45)
  • OpenFeign:Spring Cloud声明式服务调用组件

    OpenFeign? Feign VS OpenFeign? OpenFeign实现远程服务调用? OpenFeign超时控制? OpenFeign日志增强? Open Feign Spring官方推出的一种声明式服务端调用与负载均衡组件。 OpenFeign常用注解 注解 说明 @FeignClient 通知OpenFeign组件对@RequestMapping注解下的接口解析,并通过动态代理的方式实现类

    2024年02月03日
    浏览(48)
  • 第五章 : Spring cloud 微服务调用-OpenFeign

    第五章 : Spring cloud 微服务调用-OpenFeign 前言 本章知识点:OpenFeign介绍、负载均衡Ribbon的算法、Spring cloud 如何通过RestTemplate调用微服务,以及RestTemplate负载均衡原理。 OpenFeign介绍 Spring Cloud OpenFeign是一个声明式、模板化的HTTP客户端,主要用于Spring Cloud微服务之间的调用。以

    2024年02月02日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包