网关拦截:整个微服务实现过滤请求 能够解决整个微服务中冗余代码。
-
Zuul 网关属于 NetFix 公司开源框架,属于第一代微服务网关
-
Gateway 属于 SpringCloud 自己研发的网关框架,属于第二代微服务网关
-
相比来说,Gateway 比 Zuul 网关性能要好很多
主要:
-
Zuul 网关底层基于 Servlet 实现,阻塞式 api
-
SpringCloud Gateway 基于 Spring5 构建,能够实现响应式非阻塞 api,支持长连接,能够更好的支持 Spring 体系产品,依赖 SpringBoot-WebFlux
网关的服务端口号一般为:80 或者 443
开启 nacos,开启 8080 的 memeber 服务进行测试
-
创建一个 Maven 项目,并命名为 Gateway
-
导入 Maven 依赖
<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 语言。那么学习成本就会非常高
官方文档:链接
实现案例:
没有传递 token 参数的话,就不会转发
- 在 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);
}
}
- 再次请求http://127.0.0.1/member/user 接口,我们发现,如果没有 token 就会返回错误i信息
token null is not allowed
- 携带 token,请求 http://127.0.0.1/member/user?token=xasdawdwa 接口(token 可以为任意值)。可以看到正常返回
user+ 8080
5.5.1 网关集群部署原理
网关一旦宕机,整个微服务无法通信
如何解决?
网关实现集群 基于 Nginx 实现即可
网关实现了集群如何访问?
-
使用 nginx
-
lvs 虚拟 vip
环境配置
-
网关1 127.0.0.1:81
-
网关2 127.0.0.1:82
Nginx 服务器 127.0.0.1:80, 使用 Nginx 对 网关进行负载均衡的配置
5.5.2 动态网关配置
动态网关:任何配置都实现不用重启网关服务器都可以及时刷新网关配置
实现思路:
- 分布式配置中心 不建议使用 阅读性差 需要定义 json 格式的配置
{
“路由的id”: ‘’,
“路由的名称”: ‘’,
“路由的规则”: ‘’
}
- 基于数据表结构设计 特别建议
id route_id route_name route_pattern route_type route_url
1 member gorit-member /member/** 0 gorit-member
网关已经提供了 api 接口
-
直接新增
-
直接修改
思路:
默认加载的时候
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
![img](https://i-blog.csdnimg.cn/blog_migrate/c0e1863c9c95147e96be6848fcf38a76.jpeg)
总结
至此,文章终于到了尾声。总结一下,我们谈论了简历制作过程中需要注意的以下三个部分,并分别给出了一些建议:
- 技术能力:先写岗位所需能力,再写加分能力,不要写无关能力;
- 项目经历:只写明星项目,描述遵循 STAR 法则;
- 简历印象:简历遵循三大原则:清晰,简短,必要,要有的放矢,不要海投;
以及最后为大家准备的福利时间:简历模板+Java面试题+热门技术系列教程视频
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门即可获取!
e5c14a7895254671a72faed303032d36.jpg" alt=“img” style=“zoom: 33%;” />
总结
至此,文章终于到了尾声。总结一下,我们谈论了简历制作过程中需要注意的以下三个部分,并分别给出了一些建议:
- 技术能力:先写岗位所需能力,再写加分能力,不要写无关能力;
- 项目经历:只写明星项目,描述遵循 STAR 法则;
- 简历印象:简历遵循三大原则:清晰,简短,必要,要有的放矢,不要海投;
以及最后为大家准备的福利时间:简历模板+Java面试题+热门技术系列教程视频
[外链图片转存中…(img-BKTASDrE-1711827037877)]
[外链图片转存中…(img-N2UEvzXM-1711827037877)]
[外链图片转存中…(img-kMCoRBYQ-1711827037877)]
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门即可获取!