OpenFeign微服务调用组件使用

news2024/11/18 15:51:54

前言:OpenFeign是可以跨服务、跨进程的调用方式。

什么是Feign

Feign是Netflix开发的声明式、模版化的HTTP客户端。
优势:
Feign可以做到使用 HTTP 请求远程服务时就像调用本地方法一样的体验,开发者完全感知不到这是远程方法,更感知不到这是个 HTTP 请求,开发者无需关注与远程的交互细节,更无需关注分布式环境开发。

Spring Cloud Alibaba快速整合OpenFeign

1、引入依赖,谁远程调用谁引入这个依赖

<!-- openfeign 远程调用 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2、编写调用接口
在这里插入图片描述

package com.by.controller;


import cn.by.moder.OrderDTO;
import cn.by.moder.OrderOkDTO;
import cn.by.moder.OrderQueryDTO;
import cn.hutool.core.thread.ThreadUtil;
import cn.hutool.core.util.StrUtil;

import org.springframework.web.bind.annotation.*;

import java.math.BigDecimal;
import java.util.List;
import java.util.stream.Collectors;

@RestController
@RequestMapping("/api/order")
public class OrderController {


    @GetMapping("/test")
    public String test() {
        return "咸蛋超人杨order";
    }

    @GetMapping("/ordering")
    public String ordering() {
        return "咸蛋超人杨";
    }

    @GetMapping("/ordering1")
    public OrderOkDTO ordering1() {

        OrderOkDTO build = OrderOkDTO.builder().id(10086L).needPay(new BigDecimal(100)).build();
        return build;
    }

    @PostMapping("/ordering2")
    public OrderOkDTO ordering2(@RequestBody OrderDTO orderDTO) {
        List<String> names = orderDTO.getProducts().stream().map(item->item.getName()).collect(Collectors.toList());
        String join = StrUtil.join(",", names);
        OrderOkDTO build = OrderOkDTO.builder().id(10086L).needPay(new BigDecimal(100)).msg(join).build();
        return build;
    }
    @GetMapping("/select")
    public String select(OrderQueryDTO queryDTO) {
        String empty = StrUtil.EMPTY;
        if (queryDTO.getId() != null) {
            empty = "通过Id查询"+queryDTO.getId();
        }
        if (queryDTO.getUserId()!= null) {
            empty = "通过UserId查询"+queryDTO.getUserId();
        }
        return empty;
    }

    @GetMapping("/sleep")
    public String sleep(@RequestParam Integer time) {

        ThreadUtil.safeSleep(time*1000);
        return  "你睡眠了"+time+"秒";
    }
}

3、在创建一个调用端,调用端在启动类上添加@EnableFeignClients注解,并创建service接口+@FeignClient注解
在这里插入图片描述
在这里插入图片描述
接口

package com.by.service;

import cn.by.moder.OrderDTO;
import cn.by.moder.OrderOkDTO;
import cn.by.moder.OrderQueryDTO;
import com.by.config.FeignConfig;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.cloud.openfeign.SpringQueryMap;
import org.springframework.web.bind.annotation.*;

//如果想单独配置某个服务的日志级别,使用configuration单独配置
// @FeignClient(name = "order-service-app",configuration = FeignConfig.class)
@FeignClient(name = "order-service-app")
@RequestMapping("/api/order")
public interface OrderService {

    @GetMapping("/ordering")
     String ordering();

    @GetMapping("/ordering1")
    OrderOkDTO ordering1();

    @PostMapping("/ordering2")
    OrderOkDTO ordering2(@RequestBody OrderDTO orderDTO);

    @GetMapping("/select")
    String select(@SpringQueryMap OrderQueryDTO queryDTO);

    @GetMapping("/sleep")
    String sleep(@RequestParam Integer time);
}

4、发起调用,像调用本地方法一样调用远程服务
在这里插入图片描述

高级配置

1、全局配置
注意一:此处配置@Configuration注解就会全局生效,如果想指定对应某一个服务生效,就不能配置.
注意二: 因为feign调试日志是debug级别输出,springboot默认的日志级别是info,所以feign的debug日志级别就不会输出,一定要结合

package com.by.config;

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

import java.util.concurrent.TimeUnit;

@Configuration //全局配置 结合properties中的logging.level.com.by = debug使用
public class FeignConfig {

    //  @Bean
    // Logger.Level feignLoggerLevel(){
    //      // 这里记录所有请求和响应的详细信息,包括头信息等
    //      return Logger.Level.FULL;
    //  }

    @Bean
    public Request.Options options(){
        return new Request.Options(10, TimeUnit.SECONDS,20, TimeUnit.SECONDS,true);
    }
}

2 、局部配置
局部配置,让调用的微服务生效,在@FeignClient 注解中指定使用的配置类
在这里插入图片描述
3、 在配置文件配置

logging.level.com.beiyou = debug
开启日志

##配置feign 的日志级别
#-- default 全局配置
feign.client.config.default.loggerLevel=NONE
#-- nacos-a 具体服务名
feign.client.config.nacos-a.loggerLevel=FULL

超时配置
全局配置
在这里插入图片描述
配置文件配置

#全局配置
feign.client.config.default.connectTimeout=5000
feign.client.config.default.readTimeout=10000

这里default 是一个特殊的客户端名称,用于表示全局配置。设置 connectTimeout 和 readTimeout 属性的值来定义全局的连接超时时间和读取超时时间。

#局部配置 请将 <clientName> 替换为实际的Feign客户端名称。
feign.client.config.<clientName>.connectTimeout=5000
feign.client.config.<clientName>.readTimeout=10000

feign.client.config.order-service.connectTimeout=5000   # 连接超时时间,默认10s order-service:  #对应微服务
feign.client.config.order-service.readTimeout=10000     # 请求处理超时时间,默认60s

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1687573.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分布式限流总结

1、计数器 java内部可以使用原子计数器AtomicInteger\Semaphore信号量来做简单的限流 // 限流的个数private int maxCount 10;// 指定的时间内private long interval 60;// 原子类计数器private AtomicInteger atomicInteger new AtomicInteger(0);// 起始时间private lon…

Linux x86_64 UEFI 启动

文章目录 前言一、UEFI二、Disk device compatibility2.1 GPT 磁盘分区表2.1.1 简介2.1.2 Linux 2.2 ESP&#xff08;EFI&#xff09; 文件系统2.2.1 简介2.2.2 LinuxLinux Kernel EFI Boot Stub 三、UEFI GPT grub23.1 简介3.2 引导方式 3.3 BOOTX64.EFI3.4 shimx64.efi3.5 …

pip换源ubuntu

到THU网站上有给定的教程 https://mirrors.tuna.tsinghua.edu.cn/help/pypi/ 方法1 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package然后在https://pypi.org/project/nvidia-cublas-cu12/#files 里面搜索你的包名 方法2 python -m pip install --upg…

caffe在ARM鲲鹏920-openEuler2309上的环境搭建

caffe 配置环境 caffe cpu-only openblas protobuf 编译caffe需要3.6~3.10版本&#xff0c;否则会报错 dnf install只能安装3.19版本 需要从源码编译&#xff0c;这里选择了3.9版本 protobuf的github仓 从源码编译安装 caffe-gpu mode caffe的gpu模式需要用到cuda make…

【机器学习-08】 | Scikit-Learn工具包进阶指南:Scikit-Learn工具包之决策树算法实战分析

&#x1f3a9; 欢迎来到技术探索的奇幻世界&#x1f468;‍&#x1f4bb; &#x1f4dc; 个人主页&#xff1a;一伦明悦-CSDN博客 ✍&#x1f3fb; 作者简介&#xff1a; C软件开发、Python机器学习爱好者 &#x1f5e3;️ 互动与支持&#xff1a;&#x1f4ac;评论 &…

[猫头虎分享21天微信小程序基础入门教程] 第12天:小程序的自定义组件开发

[猫头虎分享21天微信小程序基础入门教程] 第12天&#xff1a;小程序的自定义组件开发 第12天&#xff1a;小程序的自定义组件开发 &#x1f6e0;️ 自我介绍 大家好&#xff0c;我是猫头虎&#xff0c;一名全栈软件工程师。今天我们继续微信小程序的学习&#xff0c;重点了…

两数交换,数组查找奇数个数的数(位运算)

文章目录 一、异或运算&#xff1a;1.1 Demo1.2 面试题 一、异或运算&#xff1a; 1.1 Demo 0和N进行异或运算都等于N 任何一个数和自己异或运算都等于0 且异或运算满足交换率 a^b b^a eg&#xff1a; a 甲 &#xff0c; b 已 那么则有 a a^b ​ b a^b ​ a a^b 故有&am…

MySQL进阶 日志结尾以及8.0新特性

日志结尾 前面我们聊了mysql的undo日志,redo日志,binlog等等,也从一条update语句来分析了一下日志的执行思路以及版本控制是怎么回事,四大特性是怎么实现的等等 今天我们来说说最后一个错误日志 其实用处不大 因为对我们开发人员来说基本上是没有权限来查看错误日志的 一般…

爬虫工程师---如何用charles把scrapy的爬虫监控起来调试

前言: 想法是,通过charles挂上魔法工具,然后跑代码的时候,实时监控每一个访问的请求状态和返回是个啥? 原理其实和挂手机等一样的;但是,我想说的,让scrapy挂上charles... 之前写过关于fiddler挂代理的路子,还有关于fiddler和charles的证书的文章,不明白的可以去查看 手机模拟器…

Unity Miscellaneous入门

概述 在Unity中有非常多好用的组件&#xff0c;也是Unity为我们提供的方便的开发工具&#xff0c;它的功能可能不是主流的内容&#xff0c;比如渲染&#xff0c;音乐&#xff0c;视频等等&#xff0c;所有Unity把这些内容统一归到了一个杂项文件组中。 Unity组件入门篇总目录-…

Centos 7 上安装【Docker】

安装Docker&#xff08;Centos 7&#xff09; 1.1.卸载&#xff08;可选&#xff09; 如果之前安装过旧版本的Docker&#xff0c;可以使用下面命令卸载&#xff1a; ***注意&#xff1a;***若提示[您需要 root 权限 执行此命令]需要在命令前加上sudo yum remove docker \do…

2. C++服务器编程-信号

什么是信号 其实信号就是一个中断。就是在执行程序的时候突然来了一个信号&#xff0c;然后我们去执行这个新来的程序了&#xff0c;这就是中断。 处理方法 信号的处理方式∶忽略、捕获、默认处理 linux中都有那些信号 man7 signal 比如说kill -9 安装man中文手册 自己百…

数据挖掘实战-基于内容协同过滤算法的电影推荐系统

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

[JAVASE] 类和对象(五) -- 抽象类和接口

目录 一. 抽象类 1.1 抽象类的定义 1.2 抽象类的实现 1.3 抽象类的作用 1.4 抽象类注意事项 二. 接口 2.1 接口的定义 2.2 接口的实现 2.3 接口的作用 2.4 接口注意事项 三. 总结 一. 抽象类 1.1 抽象类的定义 如果一个类中没有包含足够的信息来描绘一个具体的对象, 那么…

Apache无法确定服务器的完全合格域名(FQDN)报错解决方法

文章目录 一、apache语法检查报错二、报错原因分析三、报错解决办法 一、apache语法检查报错 当我们在进行apache配置时&#xff0c;需要检查配置是否存在语法错误&#xff1a; sudo apache2ctl configtestAH00558: apache2: Could not reliably determine the servers fully…

图解CPU、内存、硬盘的工作原理

1、简要概括 硬件作用cpu 负责执行计算机程序的指令内存用于临时存储程序和数据。硬盘将数据从硬盘读取到内存或将数据从内存写入硬盘的过程。联系三者协同工作&#xff0c;CPU执行程序指令&#xff0c;将需要的数据从硬盘读取到内存&#xff0c;进行计算后再将结果写回内存或…

JDBC访问数据库

JDBC学习笔记代码jar包等连接 链接&#xff1a;https://pan.baidu.com/s/1NqgMucUk7JjoSZXEkA-PPQ?pwd60kv 提取码&#xff1a;60kv –来自百度网盘超级会员V3的分享 下载驱动 不管是连接mysql还是sqlserver都需要Java的一个驱动包&#xff0c;及XXX.jar包&#xff0c;这个包…

扩散模型学习1

DDPM 总体训练原理 https://www.bilibili.com/video/BV1nB4y1h7CN/?spm_id_from333.337.search-card.all.click&vd_sourcef745c116402814185ab0e8636c993d8f 讲得很好&#xff1a;每次都是输入t和noise-x的图像&#xff0c;预测noise之后得到和加入的noise比较&#xff1b…

如何搭建springBoot项目中的全局异常处理和自定义异常处理

目录 1 什么是异常 2 异常的种类 3 解决异常的方式 4 全局异常处理器和自定义异常处理器 5 测试异常处理 1 什么是异常 异常&#xff08;Exception&#xff09;是在程序执行过程中出现的一种特殊情况或错误。它可以是由于程序逻辑错误、运行环境问题、用户输入错误等原因…

Unity中计数器的实现

Unity中计数器的实现 一、前言二、效果与逻辑&#xff08;一&#xff09; 实现效果&#xff08;二&#xff09;功能逻辑 三、功能代码四、应用实现五、结语 一、前言 最近在开发中用到计数器&#xff0c;但是unity自带的UI组件中没有&#xff0c;所以只好自己手撸了一个&#x…