NACOS使用
使用nacos作为注册中心
-
在
application.yml
文件中要配置好 spring:application:name 配置模块的名字,两个模块之间联调需要使用名字 -
引入依赖
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
-
配置nacos的服务地址
spring:
cloud:
nacos:
discovery:
server-addr: 192.168.23.182:8848
-
对两个需要通讯的 服务主类使用
@EnableDiscoveryClient
来注册上nacos -
对服务主类使用
@EnableFeignClients(basePackages = "com.phc.phcstore.storemember.member.feign")
来进行扫描feign的路径
-
编写
编写声明式接口
/** * @Author: PengHaiChen * @Description: * @Date: Create in 15:11 2021/6/22 * feignClient这个注解的作用是声明这个是一个调用接口的类,对应的模块是store-coupon */ @FeignClient("store-coupon") public interface CouponFeignService { /** * @RequestMapping 模块的接口路径 * @return */ @RequestMapping("/coupon/coupon/member/list") public R memberCoupons(); }
-
对应的接口
/** * 测试 open feign */ @RequestMapping("/member/list") public R memberCoupons(){ CouponEntity couponEntity = new CouponEntity(); couponEntity.setCouponName("满200减少4000"); return R.ok().put("coupons", Arrays.asList(couponEntity)); }
-
使用open feign
@Autowired CouponFeignService couponFeignService; /** * 使用 open feign * @return */ @RequestMapping("/coupons") public R test(){ MemberEntity memberEntity = new MemberEntity(); memberEntity.setNickname("离歌"); R memberCoupons = couponFeignService.memberCoupons(); return R.ok().put("member",memberEntity).put("coupons",memberCoupons.get("coupons")); }
使用nacos作为配置中心
-
引入依赖
<!-- nacos作为配置中心--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>
-
创建一个bootstrap.properties文件
spring.application.name=store-coupon spring.cloud.nacos.config.server-addr=192.168.23.182:8848
第一个参数是模块名,第二个参数是nacos服务器位置
-
给配置中心添加一个配置管理,命名规则为 模块名字.properties ,给 应用名.propertise添加任何想要添加的配置
-
使用
@RefreshScope
来注解 动态获取并刷新配置 -
使用
@Value("${配置项的名 }")
来赋值@Value("${coupon.user.name}") private String name; @Value("${coupon.user.age}") private Integer age;
-
如果配置中心和当前应用的配置中都配置了相同的项,优先使用配置中心的配置
细节
-
命名空间 : 配置隔离
-
默认 public(保留空间) : 默认新增的所有配置都在public空间
-
例如
开发 生产 测试
利用命名空间做环境隔离 需要在bootstrap.properties
中配置spring.cloud.nacos.config.namespace=e61bb082-d3f5-407e-a796-8a7c38a2b1ab
参数为
命令空间ID
-
基于服务之间进行隔离,让一个服务对应一个命名空间, 按照业务特性自己决定
-
-
配置集 : 所有配置的集合
-
配置集ID : 类似配置文件名,也就是
模块名字.properties
-
配置分组 : 默认所有配置集都处于
DEFAULT_GROUP
在bootstrap.properties
中配置spring.cloud.nacos.config.group=组名
-
最佳使用 每服务创建自己的命名空间,使用配置分组来区分环境
同时加载多个配置集
-
微服务的任何配置,任何配置文件都可以放在配置中心中
-
只需要在
bootstrap.properties
中说明加载那些配置文件即可 -
在
bootstrap.properties
中配置加载yml文件,这里将yml文件分成了很多份合并 -
Data Id Group store-coupon.properties dev datasource.yml dev mybatis.yml dev order.yml dev -
对应上图配置中心的
bootstrap.properties
配置代码spring.application.name=store-coupon spring.cloud.nacos.config.server-addr=192.168.23.182:8848 spring.cloud.nacos.config.namespace=af3226ab-60ce-4b1d-bab8-3c5d79ec134b spring.cloud.nacos.config.group=dev spring.cloud.nacos.config.extension-configs[0].data-id=datasource.yml spring.cloud.nacos.config.extension-configs[0].group=dev spring.cloud.nacos.config.extension-configs[0].refresh=true spring.cloud.nacos.config.extension-configs[1].data-id=mybatis.yml spring.cloud.nacos.config.extension-configs[1].group=dev spring.cloud.nacos.config.extension-configs[1].refresh=true spring.cloud.nacos.config.extension-configs[2].data-id=order.yml spring.cloud.nacos.config.extension-configs[2].group=dev spring.cloud.nacos.config.extension-configs[2].refresh=true
- 配置中心有的优先使用配置中心的