springcloud篇2-feign、gateway

devtools/2024/12/28 5:36:08/

一、Feign(http客户端)

1.1 简介

之前不同的服务之间进行远程调用使用的是RestTemplate。
在这里插入图片描述
存在下面的问题:
(1)代码可读性差,编程体验不统一;
(2)参数复杂,URL难以维护。

Feign(发音“奋”)是一个声明式的http客户端,作用是帮助我们便捷地实现http请求地发送。

1.2 使用步骤

在这里插入图片描述
在这里插入图片描述
说明:
@FeignClient注解说明远程调用地服务名称。

例如:
(1)在order-service项目中添加feign客户端依赖并开启自动装配功能
在这里插入图片描述
在这里插入图片描述
(2)在order-service中新建接口声明
在这里插入图片描述
(3)在order-service中使用声明的接口发起远程调用
在这里插入图片描述

1.3 自定义配置

在这里插入图片描述
说明:
(1)日志级别
NONE-没有日志
BASIC-记录请求的开始和结束时间
HEADERS-记录请求的开始和结束时、请求头和响应头
FULL-记录请求的开始和结束时、请求头和响应头、请求体和响应体

1.3.1 修改日志文件的级别

在这里插入图片描述
例如:
在order-serivce配置,
在这里插入图片描述
在这里插入图片描述
注意:全局配置的注解写在Application类(例如order-service的OrderApplication类)上,局部配置的注解写在Feign的配置类上(例如order-service的UserClient类)。
例如,在order-service中进行配置,
声明一个Bean:
在这里插入图片描述
加全局有效注解:
在这里插入图片描述

1.4 性能优化

Feign底层的客户端实现(三种模式):
在这里插入图片描述
对Feign性能的优化,主要是对底层客户端的改变。
在这里插入图片描述

1.4.1 连接池配置

在这里插入图片描述

1.5 最佳实践

观察可以看出,order-service发请求的配置与user-service接收的配置一致。
order-service的配置如下:
在这里插入图片描述
user-service的配置如下:
在这里插入图片描述
在这里插入图片描述

1.5.1 给消费者的FeignClient和提供者的controller定义统一的父接口作为标准

在这里插入图片描述
但该方式不推荐,会导致紧耦合。

1.5.2 服务提供者将FeignClient封装成独立模块供消费者调用

而如果有十多个服务需要访问user-service,则UserClient需要书写十多遍,不太方便。
在这里插入图片描述
缺点:feign-api可能有多个接口,但服务消费者只需要某几个,这样就冗余了。
在这里插入图片描述

1.5.2.1 实现步骤
feignapi_66">1、新建module(feign-api)并引入依赖

在这里插入图片描述
在这里插入图片描述

2、编写内容

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

feignapi_73">3、消费者导入写好的feign-api并完成导包

在这里插入图片描述

feignapiFeignClientSpringApplication_75">4、解决导入的feign-api的声明接口FeignClient不在SpringApplication的扫描包范围

注意:这时可能会出现一个问题,即FeignClient不在SpringBootApplication的扫描包范围,导致@Autowire实际注入失败,这些FeignClient无法使用。
在这里插入图片描述
在这里插入图片描述
解决方法:
在这里插入图片描述
例如:
在这里插入图片描述

二、Gateway(统一网关)

2.1 简介

之前的微服务允许任何的访问,不安全,需要添加一个网关(功能包括身份认证和权限校验、服务路由、负载均衡、请求限流)。
在这里插入图片描述
在这里插入图片描述

2.2 搭建网关

在这里插入图片描述
在这里插入图片描述

说明:网关是一个独立的服务,也需要把自己注册到nacos或从nacos中拉取服务。

例如:
创建gateway服务,引入依赖
在这里插入图片描述
在这里插入图片描述
配置路由规则:
在这里插入图片描述
测试:
在这里插入图片描述
在这里插入图片描述

2.3 路由断言predicate

在2.2 中配置过路由断言:
在这里插入图片描述
路由断言(predicates)是一种判断规则,判断请求是否符合要求,符合则转发到路由目的地(由路由断言工厂route predicate factory实现)。路由断言工厂读取配置文件的断言规则并处理,转变成路由判断的条件。
在这里插入图片描述

2.4 路由过滤器GatewayFilter

GatewayFilter是网关中提供的一种过滤器,可以对进入网关的请求和微服务返回的响应做处理(注意:不仅是请求,还有响应)。
在这里插入图片描述
spring的过滤器工厂:
在这里插入图片描述
例如:
在这里插入图片描述
例如:
gateway服务中新增过滤器的内容,
在这里插入图片描述
在user-service的controller里获取增加的请求头:
在这里插入图片描述
执行结果如下:
在这里插入图片描述
补充:
还可以使用默认过滤器,可以对所有路由都生效,
在这里插入图片描述

2.5 全局过滤器GlobalFilter

在这里插入图片描述
在这里插入图片描述例如:
在这里插入图片描述
代码实现如下:
在这里插入图片描述
增加两个注解:
在这里插入图片描述
过滤器顺序也可以通过实现接口设置:
在这里插入图片描述
在这里插入图片描述

2.6 过滤器的执行顺序

在这里插入图片描述
在这里插入图片描述

2.7 跨域问题处理

跨域是指域名不一样。主要包括,
(1)域名不同:www.taobao.com和www.taobao.org、www.jd.com和miaosha.jd.com。
(2)域名相同,端口不同:localhost:8080与localhost:8081。
注意,上面两种情况不都会产生跨域问题,跨域问题特指浏览器禁止请求的发起者与服务端发生跨域ajax请求,请求被浏览器拦截的问题。
解决方案:CORS
CORS方案是浏览器去问服务器(先到gateway)让不让请求跨域。
在这里插入图片描述
说明:
(1)add-to-simple-url-handler-mapping:true;是为了保证浏览器在是否拦截跨域请求前先问gateway
(2)maxAge:是浏览器问过一次后,该设置时间内不再询问。
例如,一个前端页面:
在这里插入图片描述
使用前端工具启动上图的页面(端口问8090),可以看到报错:
在这里插入图片描述
对跨域问题进行解决,在gateway服务中增加以下内容:
在这里插入图片描述
解决如下:
在这里插入图片描述
访问正常,控制台也打印了信息。


http://www.ppmy.cn/devtools/146018.html

相关文章

【hackmyvm】deba靶机wp

tags: HMVnodejs反序列化CVE-2017-5941wine命令定时任务 1. 基本信息^toc 文章目录 1. 基本信息^toc2. 信息收集2.1. 端口扫描2.2. 目录扫描 3. nodejs反序列化 (CVE-2017-5941)4. www-data提权low用户5. 定时任务提权6. wine命令 提权root6.1. 利用CS获取root 靶机链接 http…

汇编学习(四)

栈及栈操作的实现 指令中的栈操作 push pop // 操作的单位是字 mov ax ,1234 push ax pop ax 指令涉及两个寄存器 栈段寄存器SS 存放栈顶的段地址 栈顶指针寄存器SP 存放栈顶的偏移地址 任意时刻 SS:SP指向栈顶元素 mov ax ,1000 mov ss,ax mov …

解锁金融新纪元:内部知识库的深度挖掘与战略价值

在日新月异的金融行业中,信息的快速流通与精准决策成为了企业竞争力的核心。随着大数据、人工智能等技术的不断渗透,金融机构开始意识到,内部知识库的深度挖掘不仅是提升业务效率的关键,更是推动行业创新与转型的重要驱动力。本文…

深入解析Android Recovery系统

深入解析Android Recovery系统 引言 在Android系统中,Recovery模式是一个非常重要的组成部分。它主要用于系统的恢复、更新和修复。当用户遇到系统问题时,Recovery模式可以提供一种安全的方式来恢复系统到正常状态。本文将深入探讨Android Recovery系统的实现原理,重点分析…

【docker】pull 镜像异常

报错信息: docker pull centos Using default tag: latest Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers) 问题&am…

移动机器人推动制造业向自动化转升级

这位客户,作为一家制造业巨头,坐拥多个仓库及错综复杂的生产体系,在制造业智能化浪潮中勇立潮头,展现了非凡的数字化与智能化转型决心。 在启动智能化升级之初,客户进行了多方调研和比较,最终选择富唯智能…

协作机器人做“按摩理疗”,机器人如何感知力度呢?

随着科技的飞速发展,人工智能和机器人技术逐渐融入人们的生活,按摩机器人便是其中的佼佼者。近年来,按摩机器人行业呈现出蓬勃发展的态势,不仅为人们提供了便捷、舒适的按摩体验,还引领了健康生活新潮流。 按摩机器人是…

mysql怎么返回一个字段逗号分隔后的所有数据的sql

mysql怎么返回一个字段逗号分隔后的所有数据的sql 场景描述5.7版本MySql : 完整sql如下sql解析8.0 版本MySql : 完整sql如下 场景描述 mysql有一张表比如result表,表中有个字段场景id:scene_id,这个id存储的值可以是单个的id也可以是多个id用逗号拼接起来的,现在需…