• 【Nacos篇】Nacos基本操作及配置


    官方文档:https://nacos.io/zh-cn/docs/v2/ecology/use-nacos-with-spring-cloud.html

    前置条件:SpringCloud脚手架

    img

    单机模式下的Nacos控制台:img

    <dependencies>
            
            <dependency>
                <groupId>com.alibaba.cloudgroupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
            dependency>
    
            
            <dependency>
                <groupId>com.alibaba.cloudgroupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
            dependency>
            
            <dependency>
                <groupId>org.springframework.cloudgroupId>
                <artifactId>spring-cloud-starter-loadbalancerartifactId>
            dependency>
            <dependency>
                <groupId>org.springframework.cloudgroupId>
                <artifactId>spring-cloud-starter-openfeignartifactId>
            dependency>
        dependencies>
    

    Nacos服务注册与发现#

    img

    GitHub官方注册中心实例https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-discovery

    作为注册中心的nacos主要有三种角色:

    1. 服务提供者
    2. 服务消费者
    3. 服务注册中心

    Nacos配置#

    <dependency>
        <groupId>com.alibaba.cloudgroupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
    dependency>
    

    实现使用openFeign的负载均衡:

    <dependency>
        <groupId>org.springframework.cloudgroupId>
        <artifactId>spring-cloud-starter-loadbalancerartifactId>
    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);
        }
    }
    

    启动效果:

    img

    启动两个服务:

    img

    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。

    img

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

    img

    启动项目,看到一下内容则表示配置完成:

    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参数.

    img

    在对应的模块当中新建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 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.

    img

    配置文件: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.

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

    img

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

    img

  • 相关阅读:
    beego task
    防火墙(Firewall)
    关于OAuth2.0 Authorization Code + PKCE flow在原生客户端(Native App)下集成的一点思考
    领域驱动设计系列关键概念
    华为云算法零门槛:零基础教你AI试伊妆
    5G技术与教育的融合:挑战与机遇
    Java项目:JSP高校新生报到迎新管理系统
    【21天学习挑战赛】二分查找题目之寻找峰值
    3.9 拆解小红书爆文,流量密码原来是这些【玩赚小红书】
    dataprp库本地参数
  • 原文地址:https://www.cnblogs.com/xbhog/p/17613755.html