【Nacos篇】Nacos基本操作及配置
阅读原文时间:2023年08月09日阅读:1

官方文档: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主要有三种角色:

  1. 服务提供者

  2. 服务消费者

  3. 服务注册中心

    com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery

实现使用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);
    }
}

启动效果:

启动两个服务:

在微服务下,每个模块的主启动类都要设置上述的相关的配置。

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的持久化,主要修改nacos\conf\application.properties,该版本是MySQL5.6.

数据库名字、账号、密码需要自己设置。

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