谷粒商城-SpringCloud组件
1.SpringCloud Alibaba
1.1简介
Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件,方便开发者通过 SpringCloud 编程模型轻松使用这些组件来开发分布式应用服务。
依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统。
https://github.com/alibaba/spring-cloud-alibaba
1.2为什么使用
- SpringCloud 的几大痛点
- 部分组件停止维护和更新
- 部分环境搭建复杂,没有完善的可视化界面,我们需要大量的二次开发和定制
- 配置复杂,难以上手,部分配置差别难以区分和合理应用
- SpringCloud Alibaba 的优势:
- 性能强悍,设计合理,完善的可视化界面,搭建简单,学习曲线低。
- 结合 SpringCloud Alibaba 我们最终的技术搭配方案:
- SpringCloud Alibaba - Nacos:注册中心(服务发现/注册)
- SpringCloud Alibaba - Nacos:配置中心(动态配置管理)
- SpringCloud - Ribbon:负载均衡
- SpringCloud - Feign:声明式 HTTP 客户端(调用远程服务)
- SpringCloud Alibaba - Sentinel:服务容错(限流、降级、熔断)
- SpringCloud - Gateway:API 网关(webflux 编程模式)
- SpringCloud - Sleuth:调用链监控
- SpringCloud Alibaba - Seata:原 Fescar,即分布式事务解决方案
1.3版本选择
- 1.5.x 版本适用于 Spring Boot 1.5.x
- 2.0.x 版本适用于 Spring Boot 2.0.x
- 2.1.x 版本适用于 Spring Boot 2.1.x
1.4导入依赖 —common
1 | <dependencyManagement> |
2.Alibaba-Nacos注册中心
- 下载nacos应用
- 启动nacos
- 双击 bin 中的 startup.cmd 文件
- 访问 http://localhost:8848/nacos/
- 使用默认的 nacos/nacos 进行登录
- 将微服务注册到 nacos 中
- 导入依赖 — common模块
1
2
3
4<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency> - 在服务的yaml文件添加
1
2
3
4
5
6
7spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
application:
name: gulimall-coupon - 启动类添加@EnableDiscoveryClient注解
- 127.0.0.1:8848/nacos查看
- 导入依赖 — common模块
- 测试使用 feign 远程调用
- 导入依赖 — 创建模块时导入过
1
2
3
4<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency> - 创建feign包专门存放feign接口
- 在启动类添加@EnableFeignClients(basePackages = “feign包的全限定名”)
- 创建feign接口
1
2
3
4
5
6
public interface WareFeignService {
public R skuWareInfos();
}
- 导入依赖 — 创建模块时导入过
3.Alibaba-Nacos配置中心
3.1简单案例
- 导入依赖
1
2
3
4
5<!-- nacos配置中心 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency> - 添加boorscrap.properties
1
2spring.application.name=coupon
spring.cloud.nacos.config.server-addr=127.0.0.1:8848 - 在nacos中新建配置 — id:服务名.properties
- 动态获取配置
- @RefreshScope 动态获取并刷新配置 —启动类上
- @Value(“${配置项名}”):获取到配置 — 属性上
- 配置中心 > 当前应用配置
3.2命名空间与分组
- 命名空间:配置隔离 — spring.cloud.nacos.config.namespace=空间id
- 默认public
- 用来对开发,生产,测试环境进行隔离
- 对每个微服务进行隔离
- 配置集:所有配置的集合
- 配置集ID:类似文件名
- 配置分组:类似文件夹 — spring.cloud.nacos.config.group=分组名
- 默认:DEFAULT_GROUP
3.2加载多个配置集
- 在bootscript中添加
1
2
3spring.cloud.nacos.config.ext-config[0].data-id=datasoutce.yaml
spring.cloud.nacos.config.ext-config[0].group=dev
spring.cloud.nacos.config.ext-config[0].refresh=true
4.Gateway网关
4.1简介
- 网关作为流量的入口,常用功能包括路由转发、权限校验、限流控制等。而 springcloud gateway作为 SpringCloud 官方推出的第二代网关框架,取代了 Zuul 网关。
- 当请求到达网关,网关利用断言来判断请求是否符合路由规则,如果符合,就会经过一系列过滤器,然后到达指定地方
- 官方文档地址:
- Spring Cloud Gateway 特点:
- 创建gulimall-gateway模块 — 选择gateway
- 依赖common模块 — 注意boot和cloud版本要一致
- 注册发现和配置中心
- 配置路由规则
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
gateway:
routes:
- id: baidu_route
uri: https://www.baidu.com
predicates:
- Query=url,baidu
- id: qq_route
uri: https://www.qq.com
predicates:
- Query=url,qq
application:
name: gulimall-gateway
server:
port: 88 - 启动服务出现以下错误:
- Failed to configure a DataSource: ‘url’ attribute is not specified and no embedded datasource could be configured.
- 这是因为依赖了common模块,而没有配置数据库的数据源导致的
- 解决:在启动类添加@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
- http://localhost:88/hello?url=baidu
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lemon的博客!