SpringCloud Alibaba学习笔记 ——(五、新一代服务网关 Gateway)

网关拦截:整个微服务实现过滤请求 能够解决整个微服务中冗余代码。

5.2 Zuul 与 Gateway 有哪些区别


  1. Zuul 网关属于 NetFix 公司开源框架,属于第一代微服务网关

  2. Gateway 属于 SpringCloud 自己研发的网关框架,属于第二代微服务网关

  3. 相比来说,Gateway 比 Zuul 网关性能要好很多

主要:

  • Zuul 网关底层基于 Servlet 实现,阻塞式 api

  • SpringCloud Gateway 基于 Spring5 构建,能够实现响应式非阻塞 api,支持长连接,能够更好的支持 Spring 体系产品,依赖 SpringBoot-WebFlux

5.3 Gateway 整合 Nacos 实现服务转发


网关的服务端口号一般为:80 或者 443

开启 nacos,开启 8080 的 memeber 服务进行测试

  1. 创建一个 Maven 项目,并命名为 Gateway

  2. 导入 Maven 依赖

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns=“http://maven.apache.org/POM/4.0.0”

xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”

xsi:schemaLocation=“http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”>

4.0.0

cn.gorit

Gateway

1.0-SNAPSHOT

spring-boot-starter-parent

org.springframework.boot

2.3.4.RELEASE

org.springframework.cloud

spring-cloud-starter-gateway

2.2.4.RELEASE

com.alibaba.cloud

spring-cloud-starter-alibaba-nacos-discovery

2.2.4.RELEASE

编写 application.yml

这里是作为测试用,后期会编写配置类,来实现路由的跳转

server:

port: 80

服务网关名称

spring:

application:

name: gorit-gateway

cloud:

gateway:

discovery:

locator:

开启服务 id 去注册中心上获取转发地址

enabled: true

routes:

路由 id,就是前面的服务 name

  • id: gorit-member

基于 lb 负载均衡形式转发

uri: lb://gorit-member/

filters:

  • StripPrefix=1

匹配规则 127.0.0.1/memeber/xxxx

predicates:

  • Path=/member/**

nacos:

discovery:

server-addr: 127.0.0.1:8848

编写 app 运行

PS:确保 nacos 和 8080 端口的 member 启动了

然后我们访问 127.0.0.1/member/user 就能访问到 127.0.0.1:8080/user 的服务

5.3.1 网关与 Nginx 的区别

微服务网关能做的事情,Nginx 也可以实现

相同点:

  • 都可以实现 API 的拦截、反向代理、请求过滤、复杂均衡、可以完全和网关实现一样的效果

不同点

  • Nginx 采用 C 语言编写的

  • 在微服务领域中,都是自己语言去编写

  • 在微服务领域中每个编程语言都有,比如我们使用 Java 构建微服务项目,Gateway 也是 java 语言编写的。能够更好的对我们的微服务实现扩展功能

  • 相比 Nginx 扩展功能的化,我们必须要学习 lua 或者 c 语言。那么学习成本就会非常高

5.4 基于 Gateway拦截请求参数


官方文档:链接

实现案例:

没有传递 token 参数的话,就不会转发

  1. 在 Gateway 项目中创建一个包 filter,创建一个类 GlobalTokenFilter

package cn.gorit.filter;

import org.springframework.cloud.gateway.filter.GatewayFilterChain;

import org.springframework.cloud.gateway.filter.GlobalFilter;

import org.springframework.context.annotation.Bean;

import org.springframework.core.Ordered;

import org.springframework.core.io.buffer.DataBuffer;

import org.springframework.http.HttpStatus;

import org.springframework.http.server.reactive.ServerHttpResponse;

import org.springframework.stereotype.Component;

import org.springframework.util.StringUtils;

import org.springframework.web.server.ServerWebExchange;

import reactor.core.publisher.Mono;

/**

  • @Classname GlobalTokenFilter

  • @Description 全局过滤使用

  • @Date 2021/1/20 20:14

  • @Created by CodingGorit

  • @Version 1.0

*/

@Component

public class GlobalTokenFilter implements GlobalFilter {

@Override

public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {

// 获取参数

String token = exchange.getRequest().getQueryParams().getFirst(“token”);

if (StringUtils.isEmpty(token)) {

ServerHttpResponse response = exchange.getResponse();

response.setStatusCode(HttpStatus.INTERNAL_SERVER_ERROR);

String msg = “token null is not allowed”;

DataBuffer buffer = response.bufferFactory().wrap(msg.getBytes());

return response.writeWith(Mono.just(buffer));

}

return chain.filter(exchange);

}

}

  1. 再次请求http://127.0.0.1/member/user 接口,我们发现,如果没有 token 就会返回错误i信息

token null is not allowed

  1. 携带 token,请求 http://127.0.0.1/member/user?token=xasdawdwa 接口(token 可以为任意值)。可以看到正常返回

user+ 8080

5.5 Gateway 集群原理分析


5.5.1 网关集群部署原理

网关一旦宕机,整个微服务无法通信

如何解决?

网关实现集群 基于 Nginx 实现即可

网关实现了集群如何访问?

  1. 使用 nginx

  2. lvs 虚拟 vip

环境配置

  1. 网关1 127.0.0.1:81

  2. 网关2 127.0.0.1:82

Nginx 服务器 127.0.0.1:80, 使用 Nginx 对 网关进行负载均衡的配置

5.5.2 动态网关配置

动态网关:任何配置都实现不用重启网关服务器都可以及时刷新网关配置

实现思路:

  1. 分布式配置中心 不建议使用 阅读性差 需要定义 json 格式的配置

{

“路由的id”: ‘’,

“路由的名称”: ‘’,

“路由的规则”: ‘’

}

  1. 基于数据表结构设计 特别建议

id route_id route_name route_pattern route_type route_url

1 member gorit-member /member/** 0 gorit-member

网关已经提供了 api 接口

  1. 直接新增

  2. 直接修改

思路:

默认加载的时候
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

总结

至此,文章终于到了尾声。总结一下,我们谈论了简历制作过程中需要注意的以下三个部分,并分别给出了一些建议:

  1. 技术能力:先写岗位所需能力,再写加分能力,不要写无关能力;
  2. 项目经历:只写明星项目,描述遵循 STAR 法则;
  3. 简历印象:简历遵循三大原则:清晰,简短,必要,要有的放矢,不要海投;

以及最后为大家准备的福利时间:简历模板+Java面试题+热门技术系列教程视频

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!
e5c14a7895254671a72faed303032d36.jpg" alt=“img” style=“zoom: 33%;” />

总结

至此,文章终于到了尾声。总结一下,我们谈论了简历制作过程中需要注意的以下三个部分,并分别给出了一些建议:

  1. 技术能力:先写岗位所需能力,再写加分能力,不要写无关能力;
  2. 项目经历:只写明星项目,描述遵循 STAR 法则;
  3. 简历印象:简历遵循三大原则:清晰,简短,必要,要有的放矢,不要海投;

以及最后为大家准备的福利时间:简历模板+Java面试题+热门技术系列教程视频

[外链图片转存中…(img-BKTASDrE-1711827037877)]

[外链图片转存中…(img-N2UEvzXM-1711827037877)]

[外链图片转存中…(img-kMCoRBYQ-1711827037877)]

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!

  • 22
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值