微服务 feign-gateway

  早期微服务跨集群调用 使用的是Eureka 和RestTemplate,这种写法虽然可以解决服务之间的调用问题 ,但是随着服务的增多,实例变动,早期的写法相当于把请求方式,请求地址,参数写死了,耦合度太高,参数非常多的情况使用起来不方便。

Feign

Feign是一种声明式的 ,模板客户端,可以使用类似于SpringMvc风格的注解,更加方便的实现服务之间 的调用。

如何使用?

首先你肯定需要导入依赖 这里直接去导入SpringCloud的起步依赖

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

然后在服务调用者的启动类上开启Feign

会发现它是基于接口的 风格和以SpringMVC的风格相似  

那么你只需要通过Feign客户端调用方法 他就可以返回对应的返回值类型 非常方便

如何配置Feign 这里只给出

日志的配置

日志级别

  1. NONE:没有日志记录

  2. BASIC:记录请求方法、URL以及响应状态代码和执行时间

  3. HEADERS:记录基本信息以及请求和响应头信息

  4. FULL:记录基本信息以及请求和响应头信息、请求和响应体信息

Feign性能优化:

1.Feign使用的是默认的UrlConection

可以修改为 连接池 Apache提供的HttpClient,或者是OKHttp

2.修改日志级别,因为日志也是比较消耗性能,如果日志级别是Full,那就输出全部日志信息,修改为None又不太合适,什么都不输出还要日志干什么。所以推荐使用的是Basic.

Feign最佳实践方案:

经过市场的实践与检验,给出了两种最佳实践。

1.继承

通过定义统一Api接口 服务的调用者Feign客户端可以继承api类,但是无法继承接口的参数,需要自己重新写。

服务的提供者可以实现接口,重写业务逻辑。

但是这样会造成紧耦合。

并且官方也不推荐这样做。

2.方式二(抽取):将FeignClient抽取为独立模块,并且把接口有关的POJO、默认的Feign配置都放到这个模块中,提供给所有消费者使用,

 

GateWay网关

利用nacos实现了微服务的配置 注册发现 解决了服务间的统一调度,利用Feign实现了服务调用,但是对于客户端请求,以及服务响应就必须使用网关。

SpringCloud实现网关的方式有

zuul gateway

Zuul使用的是阻塞式编程,学过Io流,大家应该知道,阻塞式编程,就是等待请求的过程中,程序会一直等待直到完成,等待过程中不做任何事。

GateWay使用响应式编程,性能更好。

网关路由配置:

server:port: 10010
logging:level:cn.itcast: debugpattern:dateformat: MM-dd HH:mm:ss:SSS
spring:application:name: gatewaycloud:nacos:server-addr: nacos:8848 # nacos地址gateway:routes:- id: user-service # 路由标示,必须唯一uri: lb://userservice # 路由的目标地址predicates: # 路由断言,判断请求是否符合规则- Path=/user/** # 路径断言,判断路径是否是以/user开头,如果是则符合- id: order-serviceuri: lb://orderservicepredicates:- Path=/order/**default-filters:- AddRequestHeader=Truth,hhhhhhhhhhhhhh!

过滤器:

GatewayFilter是网关中提供的一种过滤器,可以对进入网关的请求和微服务返回的响应做处理:

单个路由下都可以配置自己的filter,也可以配置Defaultfilter为所有路由配置

或者是配置全局路由,需实现路由接口。

 网关跨域配置

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

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

相关文章

山东大学软件学院2021级编译原理回忆版

一、判断题 1、正则文法可以表示一般的高级程序语言&#xff0c;构成其语法成分和生成句子&#xff08;&#xff09; 2、NFA的状态和符号有且只有一条边&#xff0c;因此看起来更直观&#xff08;&#xff09; 3、DFA无法表示这样的语言{anbn,n>1}&#xff08;&#xff09; …

HackTheBox-Machines--Nibbles

Nibbles 测试过程 1 信息收集 NMAP 80 端口 网站出了打印出“Hello world&#xff01;”外&#xff0c;无其他可利用信息&#xff0c;但是查看网页源代码时&#xff0c;发现存在一个 /nibbleblog 文件夹 检查了 http://10.129.140.63/nibbleblog/ &#xff0c;发现了 /index.p…

Windows环境下 postgresql16 增量备份及恢复

修改postgresql.conf isten_addresses * wal_level replica archive_mode on archive_command copy /V "%p" C:\\backup\\wal_files\\%f 注意写法&#xff0c;这里有大坑 restore_command copy c:\\backup\\wal_files\\%f "%p" recov…

探索无限可能:API平台引领数据驱动的新时代

在数字化浪潮的推动下&#xff0c;数据已成为推动商业创新和增长的核心动力。然而&#xff0c;数据的获取、整合和应用并非易事&#xff0c;需要跨越技术、安全和效率等多重挑战。幸运的是&#xff0c;API&#xff08;应用程序接口&#xff09;平台的出现&#xff0c;为我们打开…

pom文件中,Maven导入依赖出现 Dependency not found

解决方案&#xff1a; 1、首先看一下自己的Maven是否配置好了 2、再检查一下镜像是否正确 3、如果上面都没有问题&#xff0c;看 dependencyManagement 标签 我这个出错&#xff0c;爆一大片红就是因为 这个标签 dependencyManagement 解决方法&#xff1a;在父工程中进行依…

代码随想录算法训练营第36期DAY44

DAY44 闫氏DP 2 01背包问题 用滚动数组来优化空间&#xff0c;从后向前&#xff08;大到小&#xff09;遍历j #include<iostream>using namespace std;const int N1010;int n,m;int v[N],w[N];int f[N][N];//所有只考虑前i个物品&#xff0c;**且总体积不超过j**的选法…

趋势分析:2024年 2D CAD 在工业工程软件中的市场现状

文章概览 CAD发展趋势 一、现状 二、2D CAD在工业工程规划软件中的作用 三、工业工程师使用什么软件&#xff1f; 四、DraftSight&#xff1a;功能强大的工业工程软件 实际工业工程应用 一、ERIKS&#xff1a;使用 DraftSight 管理大量 2D 图纸 二、Sealed Air&#xff1…

过敏者的福音:猫毛克星大揭秘!使用宠物空气净化器效果如何?

对于猫毛过敏者来说&#xff0c;家中爱宠的陪伴与过敏的困扰并存&#xff0c;给他们的日常生活带来了极大的不便。猫毛过敏者常常因为与猫咪接触后出现打喷嚏、鼻塞、眼睛发痒等症状而苦恼&#xff0c;严重时甚至可能影响到他们的呼吸健康。 然而&#xff0c;这并不意味着猫毛…

JavaWeb笔记整理+图解——Filter过滤器

欢迎大家来到这一篇章——Filter过滤器 监听器和过滤器都是JavaWeb服务器三大组件(Servlet、监听器、过滤器)之一,他们对于Web开发起到了不可缺少的作用。 ps:想要补充Java知识的同学们可以移步我已经完结的JavaSE笔记,里面整理了大量详细的知识点和图解,可以帮你快速掌…

Java 并发编程面试二

目录 一、并发编程三要素? 二、实现可见性的方法有哪些? 三、多线程的价值? 四、创建线程的有哪些方式? 五、创建线程的三种方式的对比? 六、Java 线程具有五中基本状态 七、什么是线程池?有哪几种创建方式 八、四种线程池的创建 九、线程池的优点? 十、常用的…

精益管理|AIRIOT智慧变电站管理解决方案

随着社会电气化进程的加速&#xff0c;电力需求与日俱增&#xff0c;变电站作为电网的关键节点&#xff0c;其稳定性和智能化管理水平直接关系到整个电力系统的高效运作。传统变电站管理平台难以适应现代电力系统复杂管理需求&#xff0c;存在如下痛点&#xff1a; 数据收集与…

【机器学习】深入探索机器学习:利用机器学习探索股票价格预测的新路径

❀机器学习 &#x1f4d2;1. 引言&#x1f4d2;2. 多种机器学习算法的应用&#x1f4d2;3. 机器学习在股票价格预测中的应用现状&#x1f389;数据收集与预处理&#x1f389;模型构建与训练&#x1f308;模型评估与预测&#x1f31e;模型评估&#x1f319;模型预测⭐注意事项 &…

请问Java8进阶水平中,常用的设计模式有哪些?

设计模式通常被分为三大类&#xff1a;创建型&#xff08;Creational&#xff09;、结构型&#xff08;Structural&#xff09;和行为型&#xff08;Behavioral&#xff09;。以下是这20个设计模式的分类&#xff1a; 创建型&#xff08;Creational&#xff09;设计模式&#…

Linux Centos内网环境中安装mysql5.7详细安装过程

一、下载安装包 下载地址&#xff08;可下载历史版本&#xff09;&#xff1a; https://downloads.mysql.com/archives/community 二、解压到安装路径 tar -zxvf mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz三、重命名 mv /usr/local/mysql-5.7.20-linux-glibc2.12-x86_64 …

(已解决)jspdf + html2canvas实现导出html为PDF文件(高清、分页)解决图片和表格被分割截断以及滚动条的问题。(含源码及详细解释)

目录 一、项目背景 二、实现过程 三、解决图片和表格分割截断以及滚动条的问题 一、项目背景 最近项目中需要实现将html页面的数据导出到pdf文件,并提供给客户端下载。在查找了一些资料之

Python 机器学习 基础 之 算法链与管道 【通用的管道接口/网格搜索预处理步骤与模型参数/网格搜索选择使用哪个模型】的简单说明

Python 机器学习 基础 之 算法链与管道 【通用的管道接口/网格搜索预处理步骤与模型参数/网格搜索选择使用哪个模型】的简单说明 目录 Python 机器学习 基础 之 算法链与管道 【通用的管道接口/网格搜索预处理步骤与模型参数/网格搜索选择使用哪个模型】的简单说明 一、简单介…

留言板——增添功能(持久化存储数据,使用MyBatis)

目录 一、数据准备 二、引入MyBatis 和 MySQL驱动依赖 三、配置MySQL账号密码 四、编写后端代码 五、调整前端代码 六、测试 之前的代码&#xff1a;综合性练习&#xff08;后端代码练习3&#xff09;——留言板_在线留言板前后端交互-CSDN博客 一、数据准备 创建数据库…

公司生产环境AWX配置的操作与部署说明

一、模板 模板名称&#xff0c;见名知义项目&#xff1a;ansible脚本所在的位置&#xff0c;可以是本地&#xff0c;也可以是远程分布式配置&#xff0c;比如gitlab。&#xff08;详见下文&#xff09;PLAYBOOK&#xff1a;ansible运行的入口凭证作业标签&#xff1a;任务的细分…

2024 RCTF WebMisc部分 WP

Misc gogogo 考点:内存取证 得到 gogogo.raw 内存取证的题用volatility和AXIOM结合分析 AXIOM 分析存在云服务 但是百度网盘要密码 https://pan.baidu.com/share/init?surlZllFd8IK-oHvTCYl61_7Kw 发现访问过sqlite数据库 可以尝试提取数据库文件出来 结合 volatility 第…

全面详解Java并发编程:从基础到高级应用

全面详解Java并发编程&#xff1a;从基础到高级应用 Java并发编程是Java开发中一个非常重要的领域&#xff0c;涉及多线程编程技术&#xff0c;用于提高程序的性能和响应能力。并发编程在多核处理器上特别有用&#xff0c;因为它可以同时执行多个任务&#xff0c;从而提高应用…