spring Cloud Alibaba 常用组件
文章目录
1、Nacos 【做注册中心】
1.1、下载 nacos-server
nacos下载地址:Releases · alibaba/nacos · GitHub
1.2、启动 nacos-server
- cmd 运行startup.cmd 文件
- 访问localhost:8848/nacos/
- 使用默认的 nacos/nacos 登录
1.3、注册进入 nacos 中
1、修改 pom.xml 文件,引入 Nacos Discovery Starter
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2、在应用的 /resource /application.properties 中配置 Nacos Server地址
配置应用名(一般是微服务模块名)以及端口
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
spring.application.name= service provider
server.port=8000
3、启动类使用@EnableDiscoveryClient
开启服务注册发现功能
简单来说分为三步:
- 导包
- 写配置,指定 nacos 地址,指定应用的名字
- 开启服务注册发现功能 @EnableDiscoveryClient
2、openFeign远程调用
假设一个场景,现在有两个微服务 coupon优惠券
和 会员member
,现在有一个业务:想要知道某会员有咩有优惠券
就需要member 微服务
调用coupon微服务
中的方法获取数据:
1、在coupon 微服务模块中写一个方法用来拿到优惠券数据
2、在 member 微服务模块中新建一个文件夹,然后新建一个声明式接口 ,将要远程调用的方法丢进去(这里有个小细节哦,方法的映射路径一定要写完整),接口上面加上注解@FeignClient("要调用的微服务名")
3、主启动类上添加注解 @EnableFeignClients("com.king.gulimall.umember.feign")
4、现在可以在member 微服务中写方法调用啦
5、启动两个微服务,nacos 中查看是否成功注册
6、访问路径看结果
至此,远程调用就测试成功啦(注意这里只是写了两个假数据,真实开发要从数据库中获取数据哦)
小总结:
Feign 使用三步:
1. 导包 openfeign
2. 开启 @EnableFeignClients 功能
3. 编写接口,进行远程调用
3、Nacos 【作为配置中心】
1、pom.xml 引入 Nacos Config Starter
<!--配置中心来做配置管理-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
2、 bootstrap.properties 中配置
spring.application.name=微服务名
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
3、nacos 中添加配置
需要给配置中心默认添加一个叫 数据集 (Data Id) gulimall-coupon.properties (默认规
则 应用名.properties)
可以添加任何配置,例如:
coupon.user.name=好好
coupon.user.age=18
4、在应用中使用@Value
和 @RefreshScope
动态获取配置
@RefreshScope // 刷新对应controller
@RestController
@RequestMapping("coupon/coupon")
public class CouponController {
@Autowired
private CouponService couponService;
@Value("${coupon.user.name}")//获取到配置
private String name;
@Value("${coupon.user.age}")
private Integer age;
@RequestMapping("/test")
public R test() {
return R.ok().put("name",name).put("age",age);
}
5、bootstrap.properties 配置
spring.application.name=gulimall-coupon # 服务的名称
spring.cloud.nacos.config.server-addr=127.0.0.1:8848 # 服务注册地址
spring.cloud.nacos.config.namespace=ae34901c-9215-4409-ae61-c6b8d6c8f9b0 # 命名空间地址
#若是以微服务名做配置文件隔离,则使用如下配置
spring.cloud.nacos.config.ext-config[0].data-id=datasource.yml # 配置集指定data_id
spring.cloud.nacos.config.ext-config[0].group=dev # 配置集指定 group分组
spring.cloud.nacos.config.ext-config[0].refresh=true # 是否动态刷新 在配置中心修改后 微服务自动刷新
相关解释
1、可以给 应用名.properties 添加任何配置
2、动态获取配置
- @RefreshScope: 动态获取并刷新配置
- @Value ( " (" ("{配置项的名字}")
- 如果配置中心和当前应用的配置文件中都配置了相同的配置文件,优先使用配置中心的文件
3、细节
命名空间:配置隔离:
-
默认:public(保留空间);默认新增的所有配置都在 public 空间
-
开发 测试 生产 利用命名空间来做环境隔离
注意: 在bootstrap.properties配置上 需要使用哪个命名空间下的配置
spring.cloud.nacos.config.namespace=b1e89ce0-784f-4a80-9de0-e9b080eeaca5
每一个微服务之间互相隔离配置,每一个微服务都创建自己的命名空间,只加载自己命名空间下的所有配置
-
配置集:所有配置的集合
-
配置集ID:类似文件名
Data ID:类似文件名
-
配置分组:
默认所有的配置都属于 DEFAULT_GROUP
每个微服务创建自己的命名空间,使用配置分组区分环境,dev、test、prod
-
同时加载多个配置集
微服务任何配置信息,任何配置文件多可以放在配置中心中
只要在 bootstrap.properties 说明加载配置中心中哪些配置文件即可
@Value,@ConfigurationProperties…
配置中心有的 优先使用配置中心的