OpenFeign微服务调用组件使用

前言: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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一个典型的分布式缓存系统是什么样的?no.32

分布式 Redis 服务 由于本课程聚焦于缓存&#xff0c;接下来&#xff0c;我将以微博内的 分布式 Redis 服务系统为例&#xff0c;介绍一个典型的分布式缓存系统的组成。 微博的 Redis 服务内部也称为 RedisService。RedisService 的整体架构如图所示。主要分为Proxy、存储、集…

使用第三方的PyCharm开发工具

目录 PyCharm下载 PyCharm安装 运行PyCharm 创建工程目录 编写“hello world”程序 在同一个工程下创建多个程序文件 运行程序的多种方法 保存程序 关闭程序或工程 删除程序 打开最近的工程 调试断点 熟悉PyCharm开发环境 设置Python解析器 输出彩色控制台文字及…

简易Docker磁盘使用面板Doku

这个项目似乎有 1 年多没更新了&#xff0c;最后发布版本的问题也没人修复&#xff0c;所以看看就行&#xff0c;不建议安装 什么是 Doku &#xff1f; Doku 是一个简单、轻量级的基于 Web 的应用程序&#xff0c;允许您以用户友好的方式监控 Docker 磁盘使用情况。Doku 显示 D…

一文读懂数电票,理解数电票与版式文件的关系

发票总的趋势是无纸化&#xff08;电子发票&#xff09;&#xff0c;方便计算机处理&#xff1b;最终达到节省人力物力的目的。国内在这方面进行了多年的探索&#xff0c;主要经历了以下几个阶段。 pdf格式的电子发票。 ofd格式电子发票&#xff0c;采用国密算法加密。 采用xml…

前端 CSS 经典:元素倒影

前言&#xff1a;好看的元素倒影&#xff0c;可以通过-webkit-box-reflect 实现。但有兼容问题&#xff0c;必须是 webkit 内核的浏览器&#xff0c;不然没效果。但是好看啊。 效果图&#xff1a; 代码实现&#xff1a; <!DOCTYPE html> <html lang"en"&g…

如何快速申请免费单域名SSL证书

申请免费的单域名SSL证书通常涉及以下几个步骤&#xff0c;虽然具体细节可能会根据不同的证书颁发机构(CA)有所差异。以下是通用的申请流程&#xff1a; 1.选择证书颁发机构&#xff1a; 访问提供免费单域名SSL证书的证书颁发机构网站&#xff0c;例如JoySSL等。 2.注册账号…

软考 软件设计师 场景分析题 速成篇

文章目录 试题一&#xff1a;数据流图&#x1f496; 基本图形元素1. 外部实体2. 数据存储3. 加工4. 数据流 &#x1f4da; 例题&#xff08;1&#xff09;实体名称&#xff08;2&#xff09;数据存储名称&#xff08;3&#xff09;数据流① 父子图平衡② 加工有输入有输出④ 数…

数据库同步软件,天不生PanguSync万古如长夜

在信息时代的海洋中&#xff0c;数据是那永不熄灭的灯塔&#xff0c;照亮了科技发展的航道。然而&#xff0c;随着数据的膨胀和应用场景的多样化&#xff0c;如何确保这些宝贵资源在不同平台、不同设备间实时更新、保持一致性&#xff0c;便成了一道亟待解决的难题。于是&#…

redis常用场景——缓存登录信息

场景重现 当一个boot程序开启拦截器&#xff0c;那么每次拦截请求都需要通过 mysql 查询用户信息&#xff0c;这样会给服务器带来很大的负担&#xff0c;此时可以使用 redis 作为中间件&#xff0c;缓存登录信息 优点&#xff1a; redis 内存读写&#xff0c;速度快 没使用re…

Linux网络编程(socket)

1. 概念 局域网和广域网 局域网&#xff1a;局域网将一定区域内的各种计算机、外部设备和数据库连接起来形成计算机通信的私有网络。广域网&#xff1a;又称广域网、外网、公网。是连接不同地区局域网或城域网计算机通信的远程公共网络。 IP&#xff08;Internet Protocol&a…

【计算机网络原理】对传输层TCP协议的重点知识的总结

˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如…

【B站 heima】小兔鲜Vue3 项目学习笔记Day04

文章目录 二级分类1.整体认识和路由配置2.面包屑导航功能实现3. 基础商品列表实现4. 定制路由滚动行为 详情页1.整体认识和路由配置2.基础数据渲染3.热榜区域实现4. 图片预览组件封装5.放大镜-滑块跟随移动左侧滑块跟随鼠标移动放大镜-大图效果 6. props适配7. SKU组件熟悉使用…

vue3项目+TypeScript前端项目 ———— elemnet-plus,svg图标配置,sass,mock数据

一.集成element-plus 官网地址 安装 pnpm install element-plus 引入 // main.ts import { createApp } from vue import ElementPlus from element-plus import element-plus/dist/index.css import App from ./App.vueconst app createApp(App)app.use(ElementPlus) app.…

气膜建筑的工作原理与优势解析—轻空间

近年来&#xff0c;气膜建筑凭借其独特的结构设计和诸多优点&#xff0c;迅速成为建筑领域的热门选择。本文将详细介绍气膜建筑的工作原理、机械系统、智能控制、索网控制和空气净化等方面&#xff0c;为您提供全面了解气膜建筑的基础知识。 气膜建筑的工作原理 气膜建筑是一种…

01 FreeRTOS 初识

1、freeRTOS 1.1 什么是FreeRTOS Free就是免费的&#xff0c;RTOS全称是real time operating system&#xff0c;即实时操作系统。FreeRTOS是一个迷你的实时操作系统内核&#xff0c;作为一个轻量级的操作系统&#xff0c;功能包括&#xff1a;任务管理、时间管理、信号量、消…

【AI基础】反向传播

文章目录 1. 先写出第一步2.将其封装成函数3. pytorch版 1. 先写出第一步 # 定义输入值和期望输出 x_1 40.0 x_2 80.0 expected_output 60.0 初始化# 定义权重 w_1_11 0.5 w_1_12 0.5 w_1_13 0.5 w_1_21 0.5 w_1_22 0.5 w_1_23 0.5w_2_11 1.0 w_2_21 1.0 w_2_31 1…

RocketMQ实战教程之RocketMQ安装(含Docker安装,建议收藏!)

RocketMQ实战教程之RocketMQ安装 这里实例采用centos系统天翼云为例,分别采用传统安装以及Docker安装的方式来进行RocketMQ的安装.JDK8我这边已经安装配置好了,这里就不在赘述.直接进入正题: 传统安装包安装 系统要求 64位操作系统&#xff0c;推荐 Linux/Unix/macOS64位 JDK…

Java 对外API接口开发 java开发api接口如何编写

Java API API&#xff08;Application Programming Interface&#xff09;是指应用程序编程接口&#xff0c;的JavaAPI是指JDK提供的各种功能的Java类 String类 String类的初始化&#xff1a; &#xff08;1&#xff09;使用字符串常量直接初始化 初始化&#xff1a;String s…

第11章 集合与迭代器

目录 目录 目录 11.1 Collection集合 11.1.1 集合的概念 11.1.2 Collection接口 1、添加元素 2、删除元素 3、查询与获取元素 11.2 List 有序集合 11.2.1 新增方法 11.2.2 ArrayList 11.2.3 LinkedList 1、单向链表 2、双向链表 3、删除元素 11.3 Set 无序集合 …

深度学习-转置卷积

转置卷积 转置卷积&#xff08;Transposed Convolution&#xff09;&#xff0c;也被称为反卷积&#xff08;Deconvolution&#xff09;&#xff0c;是深度学习中的一种操作&#xff0c;特别是在卷积神经网络&#xff08;CNN&#xff09;中。它可以将一个低维度的特征图&#x…