24.nacos注册中心集群搭建、网关、过滤器

您所在的位置:网站首页 支付网关的含义和作用 24.nacos注册中心集群搭建、网关、过滤器

24.nacos注册中心集群搭建、网关、过滤器

2024-07-14 01:12:44| 来源: 网络整理| 查看: 265

1、nacos注册中心集群的搭建

 

要想搭建nacos集群模式,这些集群中的每台nacos服务,都必须连接同一个数据库。因为我们的nacos都放在同一台主机上,所以我们必须为每台nacos起不同的端口号。

 

1.1修改nacos端口号 8849 8850 8851

E:\idea2023\nacos\nacos\conf\application.properties

 

 1.3创建nacos数据库并导入相关的表结构和数据

 

 

 

 

 

 

 

集群为什么建奇数个? 节点数 大于等于一半,则认为整个集群挂掉了 

1.6 修改product

 

spring.cloud.nacos.discovery.serveraddr= 192.168.28.180:8849,192.168.28.180:8850,192.168.28.180:8851

2、网关 2.1为什么使用网关

如果商品微服务或订单微服务ip和端口号发生改变,那么我们必须修改前端代码

后台微服务可能存在成百上千的服务,难道前端必须都要记住每个微服务的ip和端口号?

在每个微服务接口访问前,都需要验证当前用户是否登录。

解决方案: 需要再所有微服务前,搞一个代理服务器。让前端记住代理服务器的地址。由代理把请求转发给后面的微服务。  

所谓的API网关,就是指系统的统一入口,它封装了应用程序的内部结构,为客户端提供统一服 务,一些与业务本身功能无关的公共逻辑可以在这里实现,诸如认证、鉴权、监控(黑白名单)、路由转发等等。 添加上API网关之后,系统的架构图变成了如下所示:

2.2常见的代理组件由哪些? 

nginx:

l Kong

基于Nginx+Lua[再nginx中可以编写代码]开发,性能高,稳定,有多个可用的插件(限流、鉴权等等)可以开箱即用。 问题: 只支持Http协议;二次开发,自由扩展困难;提供管理API,缺乏更易用的管控、配置方式。

l Zuul 1.0(慢 servlet 2.0 ) zuul2.0 没出来。

Netflix开源的网关,功能丰富,使用JAVA开发,易于二次开发 问题:缺乏管控,无法动态配

置;依赖组件较多;处理Http请求依赖的是Web容器,性能不如Nginx

l Spring Cloud Gateway

Spring公司为了替换Zuul而开发的网关服务,将在下面具体介绍。

注意:SpringCloud alibaba技术栈中并没有提供自己的网关,我们可以采用Spring Cloud Gateway来做网关  

2.3springcloud -gateway网关的简介

Spring Cloud Gateway是Spring公司基于Spring 5.0,Spring Boot 2.0 和 Project Reactor 等术开发的网关,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。它的目标是替代 Netflix Zuul,其不仅提供统一的路由方式,并且基于 Filter 链的方式提供了网关基本的功能,例如:安全,监控和限流。

优点:

性能强劲:是第一代网关Zuul的1.6倍

功能强大:内置了很多实用的功能,例如转发、监控、限流等

设计优雅,容易扩展.

缺点

gateway内置了服务器 netty服务器。千万不要在使用tomcat作为服务器。  

2.4如何使用gateway网关

(1)gateway 依赖

org.springframework.cloud spring-cloud-starter-gateway

 (2)主启动类

@SpringBootApplication public class GatewayApp { public static void main(String[] args) { SpringApplication.run(GatewayApp.class,args); } }

 (3)配置文件

#端口号 server: port: 7000 #服务名称 spring: application: name: qy163-gateway1 #配置路由 cloud: gateway: routes: - id: qy163-product #唯一即可,如果没有默认UUID生成 order: 0 #优先级,值越小优先级越高 uri: http://localhost:8080 #真实要转发的微服务地址 http://localhost:8080/product/getById/1 predicates: - Path=/product/** #断言:当满足该断言,则会转发到uri地址,path:路径断言 - id: qy163-order uri: http://localhost:8090 predicates: - Path=/order/**

 

2.5 网关增强版

现在在配置文件中写死了转发路径的地址, 前面我们已经分析过地址写死带来的问题,. 接下来我们从注册中心获取此地址。

(1) gateway微服务中引入nacos依赖

com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery

 (2)修改配置文件

 

#端口号 server: port: 7000 #服务名称 spring: application: name: gateway1 #配置路由 cloud: gateway: routes: - id: product #唯一即可,如果没有默认UUID生成 order: 0 #优先级 值越小优先级越高 #uri: http://localhost:8080 #真实要转发的微服务地址 http://localhost:8080/product/getById/1 uri: lb://product predicates: - Path=/product/** #断言:当满足该断言,则会转发到uri地址。 path:路径断言 - id: order #uri: http://localhost:8090 uri: lb://order predicates: - Path=/order/** #注册中心地址 nacos: discovery: server-addr: 192.168.28.180:8849,192.168.28.180:8850,192.168.28.180:8851  2.6 网关简约版

如果后面增加一个微服务-那么我们就得修改gateway的配置。

自动定位微服务。

(1)修改配置文件

 

2.7gateway基本概念

路由(Route) 是 gateway 中最基本的组件之一,表示一个具体的路由信息载体。主要定义了下面的几个信息:

id,路由标识符,区别于其他 Route。默认生成一个

uri,路由指向的目的地 uri,即客户端请求最终被转发到的微服务。

order,用于多个 Route 之间的排序,数值越小排序越靠前,匹配优先级越高。--不改

predicate,断言的作用是进行条件判断,只有断言都返回真,才会真正的执行路由。

filter,过滤器用于修改请求和响应信息。  

2.8gateway路由的流程

 2.9gateway提供了哪些断言

l *基于**Datetime**类型的断言工厂*

此类型的断言根据时间做判断,主要有三个:

AfterRoutePredicateFactory: 接收一个日期参数,判断请求日期是否晚于指定日期

BeforeRoutePredicateFactory: 接收一个日期参数,判断请求日期是否早于指定日期

BetweenRoutePredicateFactory: 接收两个日期参数,判断请求日期是否在指定时间段内

-After=2019-12-31T23:59:59.789+08:00[Asia/Shanghai]

l *基于远程地址的断言工厂* *RemoteAddrRoutePredicateFactory**:*

接收一个IP地址段,判断请求主机地址是否在地址段中

-RemoteAddr=192.168.1.1/24

l *基于**Cookie**的断言工厂*

CookieRoutePredicateFactory:接收两个参数,cookie 名字和一个正则表达式。 判断请求

cookie是否具有给定名称且值与正则表达式匹配。

-Cookie=chocolate, ch.

l *基于**Header**的断言工厂*

HeaderRoutePredicateFactory:接收两个参数,标题名称和正则表达式。 判断请求Header是否

具有给定名称且值与正则表达式匹配。 key value

-Header=X-Request-Id, \d+

l *基于**Host**的断言工厂*

HostRoutePredicateFactory:接收一个参数,主机名模式。判断请求的Host是否满足匹配规则。

-Host=**.testhost.org

l *基于**Method**请求方法的断言工厂*

MethodRoutePredicateFactory:接收一个参数,判断请求类型是否跟指定的类型匹配。

-Method=GET

l *基于**Path**请求路径的断言工厂*

PathRoutePredicateFactory:接收一个参数,判断请求的URI部分是否满足路径规则。

-Path=/foo/{segment}基于Query请求参数的断言工厂

QueryRoutePredicateFactory :接收两个参数,请求param和正则表达式, 判断请求参数是否具

有给定名称且值与正则表达式匹配。

-Query=baz, ba.

l *基于路由权重的断言工厂*

WeightRoutePredicateFactory:接收一个[组名,权重], 然后对于同一个组内的路由按照权重转发

routes:

-id: weight_route1 uri: host1 predicates:

-Path=/product/**

-Weight=group3, 1

-id: weight_route2 uri: host2 predicates:

-Path=/product/**

-Weight= group3, 9  

3、过滤器

第一种局部过滤:只对当前路由有效

第二种全局过滤器: 对所有的路由都有

全局过滤器:

认证校验功能

当客户端第一次请求服务时,服务端对用户进行信息认证(登录)

认证通过,将用户信息进行加密形成token,返回给客户端aaaa,作为登录凭证

以后每次请求,客户端都携带认证的token

服务端对token进行解密,判断是否有效。

对于验证用户是否已经登录鉴权的过程可以在网关统一检验。

检验的标准就是请求中是否携带token凭证以及token的正确性。

下面的我们自定义一个GlobalFilter,去校验所有请求的请求参数中是否包含“token”,如何不包含请求参数“token”则不转发路由,否则执行正常的逻辑

自定义全局过滤器 要求:必须实现GlobalFilter,Ordered接口

@Component//交于spring容器管理该类对象 public class MyGlobalFilter implements GlobalFilter, Ordered{ @Override public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { ServerHttpRequest request = exchange.getRequest(); ServerHttpResponse response = exchange.getResponse(); //获取请求路径 String path = request.getPath().toString(); //该路径是否为放行路径 if(path != null && path.equals("/login")){ return chain.filter(exchange);//放行 } //获取当前请求是否携带token令牌----请求头中放置 String token = request.getHeaders().getFirst("token"); if(token != null && token.equals("admin")){ //注意:这里的admin是随便写的 return chain.filter(exchange);//放行 } //请先登录---- //3.2封装返回数据 Map map = new HashMap(); map.put("msg", "未登录"); map.put("code", 401); //3.3作JSON转换--fastjson byte[] bytes = JSON.toJSONString(map).getBytes(StandardCharsets.UTF_8); //3.4调用bufferFactory方法,生成DataBuffer对象 DataBuffer buffer = response.bufferFactory().wrap(bytes); //4.调用Mono中的just方法,返回要写给前端的JSON数据 return response.writeWith(Mono.just(buffer)); } /** * 获取优先级, 值越大优先级越高 * @return */ @Override public int getOrder() { return 0; } }

 



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭