码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【云原生】springcloud10——人生苦短,我用OpenFeign


    在这里插入图片描述

    前 言
    🍉 作者简介:半旧518,长跑型选手,立志坚持写10年博客,专注于java后端
    ☕专栏简介:深入、全面、系统的介绍springcloud与springcloud Alibaba微服务常用技术栈
    🌰 文章简介:本文将介绍Ribbon负载均衡的原理,深入源码进行分析,并且手撕轮询算法,建议收藏备用,创作不易,敬请三连哦
    🥒文章推荐:
    微服务架构与springcloud 01——微服务入门
    微服务架构与springcloud02——父工程构建及支付模块实现
    微服务架构与springcloud03——项目热部署与消费者订单模块
    微服务架构与springcloud04——Eureka服务注册与发现
    springcloud05——Zookeeper实现支付微服务
    【云原生】springcloud06——订单服务注册zookeeper
    【云原生】springcloud07—Consul的服务注册与发现
    【云原生】springcloud08——Ribbon负载均衡调用
    【云原生】springcloud09——但愿发长久,空手撕Ribbon

    文章目录

    • 1.OpenFeign的简介
      • 1.1 Feign与OpenFeign简介
      • 1.2 Feign能干什么
    • 2 OpenFeign的使用
      • 2.1 服务架构
      • 2.2 OpenFeign的使用步骤
      • 2.3 建模块
      • 2.4 写Pom
      • 2.5 application.yml
      • 2.6 主启动
      • 2.7 业务类
      • 2.8 测试
      • 2.9 总结
    • 3 OpenFeign的超时机制
    • 4 OpenFeign的日志增强

    前面我们已经讲了服务注册的Eureka,Zookeeper,Consult,以及调用部分的的Ribbon和LoadBalancer,现在我们将学习服务调用的第二部分组件,Feign和OpenFeign,由于Feign已经停更了,我们直接进入OpenFeign的学习。
    在这里插入图片描述

    1.OpenFeign的简介

    1.1 Feign与OpenFeign简介

    官网文档:OpenFeign官网文档

    在这里插入图片描述
    Feign是Netflix开发的声明式、模板化的HTTP客户端, Feign可以帮助我们更快捷、优雅地调用HTTP API。

    Spring Cloud对Feign进行了增强,使Feign支持了Spring MVC注解,并整合了Ribbon和Eureka,从而让Feign的使用更加方便。

    1.2 Feign能干什么

    在这里插入图片描述
    简单来说,Feign定义服务调用的接口,通过注解即可绑定服务提供方的接口,让不同微服务方便的共用一套服务调用的模板。后面我们将通过code来深入理解。

    2 OpenFeign的使用

    2.1 服务架构

    在这里插入图片描述

    2.2 OpenFeign的使用步骤

    在这里插入图片描述

    2.3 建模块

    新建模块cloud-consumer-feign-order80
    在这里插入图片描述

    2.4 写Pom

    <dependencies>
        
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-openfeignartifactId>
        dependency>
        
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
        dependency>
        
        <dependency>
            <groupId>com.wangzhou.springcloudgroupId>
            <artifactId>cloud-api-commonsartifactId>
            <version>${project.version}version>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-actuatorartifactId>
        dependency>
        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-devtoolsartifactId>
            <scope>runtimescope>
            <optional>trueoptional>
        dependency>
        <dependency>
            <groupId>org.projectlombokgroupId>
            <artifactId>lombokartifactId>
            <optional>trueoptional>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
        dependency>
    dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43

    在idea右上角可以看到80服务的maven依赖,发现果然eureka,ribbon,hystrix等依赖都被一并导入进来了。

    在这里插入图片描述

    2.5 application.yml

    server:
      port: 80
    
    eureka:
      client:
        register-with-eureka: true
        service-url:
          #defaultZone: http://eureka7001.com:7001/eureka
          defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    2.6 主启动

    @SpringBootApplication
    @EnableFeignClients //激活并开启OpenFeign
    public class OrderMainFeign80 {
        public static void main(String[] args) {
            new SpringApplication(OrderMainFeign80.class).run(args);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2.7 业务类

    (1)service
    在springcloud包下新建service.PaymentFeignService接口
    (业务逻辑接口+@FeignClient配置调用provider服务。)

    新建PaymentFeignService接口并新增注解@FeignClient

    @Component
    @FeignClient(value = "CLOUD-PAYMENT-SERVICE") // 告知Feign要去Eureka上找名字为cloud-payment-service的微服务
    public interface PaymentFeignService {
    	// 下面的接口与8001服务端保持一致,我们可以直接去copy
        @GetMapping(value = "/payment/get/{id}")// value值为调用地址
        public CommonResult getPaymentById(@PathVariable("id")Long id);
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    发现没有,现在service只需要写接口+使用注解即可,很清爽。

    (2)Controller
    controller暴露下接口,调用下service就大功告成。

    @Slf4j
    @RestController
    public class PaymentFeignController {
    
        //@Resource和@Autowired注解都是用来实现依赖注入的。
        // 只是@AutoWried按by type自动注入,而@Resource默认按byName自动注入。
        @Resource
        private PaymentFeignService paymentFeignService;
    
        @GetMapping("/consumer/payment/get/{id}")
        public CommonResult<Payment> getPayment(@PathVariable("id")Long id){
            log.info("********查询的id:" + id);
            return paymentFeignService.getPaymentById(id);
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    2.8 测试

    依次启动7001,7002Eureka集群,8001,8002服务提供者支付微服务集群,最后启动服务调用者订单模块OrderMainFeign80.

    访问:http://localhost/consumer/payment/get/1
    在这里插入图片描述
    完活。

    2.9 总结

    再回过头来领悟下OpenFeign是怎么实现服务调用的:接口+注解。简单不?
    在这里插入图片描述

    3 OpenFeign的超时机制

    在8001,8002的cotroller中增加如下接口。

       @GetMapping("feign/timeout")
        public String paymentTimeout() throws InterruptedException {
            TimeUnit.SECONDS.sleep(3);
            return serverPort;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    改造下80的service,增加paymentTimeout(cv完事了)。
    在这里插入图片描述
    改造下controller
    在这里插入图片描述

    启动各个微服务后,再访问http://localhost:8001/payment/feign/timeout自测下。
    在这里插入图片描述
    再访问:http://localhost/consumer/payment/feign/timeout,宝子注意看: Read timed out executing GET http://CLOUD-PAYMENT-SERVICE/payment/feign/timeout!!!

    在这里插入图片描述
    我们可以通过配置来改变其超时等待时间。在80的yml中添加。

    #没提示不管它,可以设置
    ribbon:
      #指的是建立连接后从服务器读取到可用资源所用的时间
      ReadTimeout: 5000
      #指的是建立连接使用的时间,适用于网络状况正常的情况下,两端连接所用的时间
      ConnectTimeout: 5000
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    再测试即可。
    在这里插入图片描述

    4 OpenFeign的日志增强

    OpenFeign可用进行日志增强,查看
    其日志级别如下。
    在这里插入图片描述

    步骤
    配置日志bean
    在80的springcloud包下新建config.FeignConfig

    import feign.Logger;	//不要导错包
    
    @Configuration
    public class FeignConfig {
        @Bean
        Logger.Level feignLoggerLevel(){
            //打印最详细的日志
            return Logger.Level.FULL;
        }
        
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在80的yml文件中添加:

    #开启日志的feign客户端
    logging:
      level:
        #feign日志以什么级别监控哪个接口
        com.achang.springcloud.service.PaymentFeignService: debug	#写你们自己的包名
    
    • 1
    • 2
    • 3
    • 4
    • 5
  • 相关阅读:
    硬盘io性能分析
    (01)ORB-SLAM2源码无死角解析-(54) 闭环线程→闭环检测:寻找闭环候选关键帧 LoopClosing::DetectLoop()
    HZOJ-72:猜拳
    Linux常用工具集
    一篇案例读懂国央企如何实现数字化管控
    Android使用osmdroid加载在线地图,离线地图以及各种填坑姿势
    江湖再见,机器视觉兄弟们,我已经提离职了,聪明的机器视觉工程师,离职不亏本!
    uniapp支付宝小程序授权用户信息、授权手机号码
    Vue中事件总线EventBus的应用(三)定义全局事件——实例之main.js-创建事件总线、$emit-发布事件、$on-订阅事件、$off-去除事件
    2023年09月 C/C++(三级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • 原文地址:https://blog.csdn.net/qq_41708993/article/details/126796421
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号