分布式
- 注册中心统一管理服务,配置中心统一管理配置
- 网关对所有前端请求 路由,过滤,限流
8、SpringCloud Alibaba简介
SpringCloud的几大痛点:
- SpringCloud部分组件停止维护和更新,给开发带来不便;
- SpringCloud部门环境搭建复杂,没有完善的可视化界面,我们需要大量的二次开发和定制
- SpringCloud配置复杂,难以上手,部分配置差别难以区分和合理应用
SpringCloud Alibab的优势:
- 性能强悍,搭建简单
SpringCloud Alibab组件
- SpringCloud Alibaba -Nacos:注册中心(服务发现/注册)
- SpringCloud Alibaba -Nacos:配置中心(动态配置管理)
- SpringCloud Alibaba-Sentinel:服务容错(限流、降级、熔断)
- SpringCloud-Gateway:API网关(webflux编程模式)
- SpringCloud Alibaba-Seata:分布式事务解决方案
- SpringCloud-Sleuth:调用链监控
- Feign是声明式,模板化的HTTP客户端,支持负载均衡
- OpenFeign对Feign增强,支持Spring mvc注解(如:GetMapping)
版本号决定
- cloud Hoxton.SR6 ,alibaba ,2.2.1.RELEASE,boot 2.3.2.RELEASE
在common的pom.xml中加入
- dependencies
dependencyManagement
-
让子项目引用依赖而不用显示的列出版本号。Maven会沿着父子层次向上走,直到找到一个拥有dependencyManagement元素的项目,使用这个dependencyManagement元素中指定的版本号
dependencyManagement(统一管理依赖版本)
- 字模块使用父模块的版本号
- import避免单继承限制,引入模块使用import的版本号(scope必须是import,type必须是pom)
依赖引入
- 引入discovery 自动引入discovery依赖的cloud,cloud alibaba,只需要对应版本号的控制,(可使用import控制)
- 使用import控制版本号只能控制当前pom所有引入依赖的版本号,如果所有pom有相同控制,必须在所有pom添加一份。
最后决定
- 使用父模块定义版本号,子模块使用父模块的版本号,不然每个pom依然要定义一份属于自己的版本号
- 只会引用一次的依赖加入common作为公共引入即可,多次引入的需要规定版本号放入父pom(boot,cloud,alibaba)
生成spring boot,勾选cloud服务时(不用spring boot 生成任何东西)
- 初始的boot版本也选定,声明一个dependencyManagement控制版本号
新建module,新建maven创建(不用boot)
- 一个基本的可访问服务只需要,boot,web,test
Cloud代码和安装
- 安装 https://blog.youkuaiyun.com/qq_25744257/article/details/127526602
- 代码 https://blog.youkuaiyun.com/qq_25744257/article/details/127507006
新建bootstrap.yaml配置 Nacos Config 元数据
说明(user.name会取系统名字,需要区分开)
说明(优先使用配置中心配置)
新建配置文件
- bootstrap配置文件后缀,file-extension: yaml
- dataId默认为服务名+后缀名 gulimall-coupon.yaml
Nacos 命名空间(配置隔离)
- 利用命名空间作环境隔离。(开发,测试,生产)
- bootstrap配置命名空间。config.namespace
配置分组(环境隔离)
最终方案:
- 每个微服务创建自己的命名空间(namespace),然后使用配置分组区分环境(group)(dev/test/prod)
使用方法:克隆到命名空间,克隆到分组
加载多个配置集
配置中心有的,使用配置中心,没有使用默认的
总结
- 任何配置文件都能放在配置中心
- bootstrap配置配置中心地址,上线后把所有配置 配置到配置中心。
Gateway 网关
解决问题
- (服务掉线后,重新修改地址)
- 一次调用链路多次请求不同的微服务,增加客户端的复杂性
- 认证复杂,每个服务都要进行认证
Gateway 网关
- 流量的统一入口,常用功能包括路由转发,认证授权,限流
.1 核心概念
- 路由(route),路由信息包括ID、目的URI、断言工厂、Filter组成。如果断言为真,则说明请求的URL和配置的路由匹配。
- 断言(predicates) 断言函数允许开发者去定义匹配Http request中的任何信息,比如请求头和参数等。
- 过滤器(Filter) Gateway FilIer和Global Filter。Filter可以对请求和响应进行处理
Gateway 网关快速入门
- 前提:注册到Nacos(Nacos依赖,Nacos配置,@EnableDiscoveryClient )
- 引入网关依赖:starter-gateway
- yml配置
路由配置 cloud: gateway: routes:
- id: 唯一标识。默认是一个UUID
- uri: lb://service-openfeign 需要转发路径
- predicates: 断言, 路径的匹配规则
- filters: 过滤器 (经过的过滤器)
创建gateway
- 创建,使用initilizer,Group:com.atguigu.gulimall,Artifact: gulimall-gateway,package:com.atguigu.gulimall.gateway。 搜索gateway选中。
- 引入common,引入数据库配置需要移除 (@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}))
Query=uri,baidu
- 参数,uri=baidu 就跳过去
Path=/goods/**
- 请求http://127.0.0.1/goods/findOne/2,匹配/goods/**,
- 拼接/goods/**和uri=http://localhost:8001/,最终url=http://localhost:8001/goods/**
filters
- RewritePath 重写路径 api替换为renren-fast/
- RewritePath=/api/(?<segment>/?.*), /renren-fast/$\{segment}
谷粒商城-个人笔记(基础篇一)_代码的知行者的博客-优快云博客_谷粒商城
https://blog.youkuaiyun.com/qq_25744257/article/details/125647955