官方文档:https://nacos.io/zh-cn/docs/v2/ecology/use-nacos-with-spring-cloud.html
前置条件:SpringCloud脚手架

单机模式下的Nacos控制台:
<dependencies> <!-- Registry 注册中心相关 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <!-- Config 配置中心相关 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> <!--服务间的远程调用--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-loadbalancer</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> </dependencies>
Nacos服务注册与发现

GitHub官方注册中心实例:https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-discovery
作为注册中心的nacos主要有三种角色:
- 服务提供者
- 服务消费者
- 服务注册中心
Nacos配置
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
实现使用openFeign的负载均衡:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-loadbalancer</artifactId> </dependency>
Nacos之前的默认的负载均衡是Ribbon,现版本Nacos 2021已经没有自带Ribbon的整合,所以无法通过修改Ribbon负载均衡的模式来实现Nacos提供的负载均衡模式;
启动类增加注解开关:配置文件在最后
@EnableFeignClients //openfeign 负载均衡及服务调用 @EnableDiscoveryClient //nacos 注册中心 @SpringBootApplication(exclude = DataSourceAutoConfiguration.class) public class LotteryRpc { public static void main(String[] args) { SpringApplication.run(LotteryRpc.class, args); } }
启动效果:

启动两个服务:

OpenFeign使用
在微服务下,每个模块的主启动类都要设置上述的相关的配置。
lottery-activity--------请求-------->lottery-strategy
Lottery-Cloud └── lottery-activity └── lottery-activity-facade └── IActivityToStrategyIntegration └── lottery-strategy └── lottery-strategy-controller └── StrategyController.java
IActivityToStrategyIntegrationn内容
@Service @FeignClient(value = "lottery-strategy") public interface IActivityToStrategyIntegration { /** * 添加活动策略 * @param strategyDtos */ @PostMapping("/facade/addStrategy") void addStrategy(@RequestBody StrategyDto strategyDtos); }
strategy服务中正常的接口实现,但是请求的地址、数据类型等需要保持一致。
@PostMapping("/facade/addStrategy") public void addStrategy(@RequestBody StrategyDto strategyDtos){ log.info("活动模块请求策略模块,请求参数:{}",strategyDtos); }
Nacos的配置中心
公共配置
在微服务项目中,多个模块在MySQL、Redis、RocketMQ等有些配置上是相同的,可以将相同的配置抽取出来,通过nacos的扩展进行引入,实现配置共享。
在nacos对应的空间中创建公共yaml。

我将mysql、druid、mybatis-plus等配置抽取了。

启动项目,看到一下内容则表示配置完成:
2023-08-06 16:50:37.162 INFO 17508 --- [ main] c.a.c.n.refresh.NacosContextRefresher : [Nacos Config] Listening config: dataId=lottery-common-dev.yaml, group=DEFAULT_GROUP
单独配置
在开发过程中不免有需要自定义的参数获取,在nacos可以通过编写配置文件来获取nacos中自定义参数。
我们新建一个yaml文件:lottery-strategy-dev.yaml文件,里面添加MaxTimes=1参数.

在对应的模块当中新建StrategyConfig
/** * @author xbhog * @describe: * @date 2023/8/5 */ @Getter @Configuration @RefreshScope //自动刷新 public class StrategyConfig { @Value("${MaxTimes}") private String maxTimes; }
设置测试请求:
@Autowired private StrategyConfig strategyConfig; //-------------------------------------- @GetMapping("/test") public ResponseResult<String> test(){ log.info("============获取的值:{}",strategyConfig.getMaxTimes()); return ResponseResult.success(null); }
测试数据:
2023-08-06 17:01:25.328 [http-nio-8001-exec-3] INFO o.a.c.c.C.[Tomcat].[localhost].[/]: Initializing Spring DispatcherServlet 'dispatcherServlet' 2023-08-06 17:01:25.328 [http-nio-8001-exec-3] INFO o.s.web.servlet.DispatcherServlet: Initializing Servlet 'dispatcherServlet' 2023-08-06 17:01:25.330 [http-nio-8001-exec-3] INFO o.s.web.servlet.DispatcherServlet: Completed initialization in 1 ms 2023-08-06 17:01:25.384 [http-nio-8001-exec-3] INFO c.x.controller.StrategyController: ============获取的值:1
当修改完参数值,发布后,Springboot开始监听到并更新。在请求,数据就变成了2.

配置文件:bootstrap.yaml
spring: #在nacos中对应的dataID名 application: #应用名称 name: lottery-activity profiles: # 环境配置 active: @profiles.active@ --- # nacos 配置 spring: cloud: config: override-none: true allow-override: true override-system-properties: false nacos: # 注册地址 server-addr: @nacos.server@ discovery: # 注册组 group: @nacos.discovery.group@ namespace: ${spring.profiles.active} config: # 配置组 group: @nacos.config.group@ namespace: ${spring.profiles.active} file-extension: yaml #引入公共配置文件,开启自动刷新 shared-configs: - data-id: lottery-common-dev.yaml refresh: true refresh-enabled: true
Nacos的持久化
基于MySQL的持久化,主要修改nacosconfapplication.properties,该版本是MySQL5.6.
数据库名字、账号、密码需要自己设置。

重启nacos,查看数据库中的nacos配置。
