• nacos的学习


    一、nacos配置中心

    1.docker启动nacos

    docker run --env MODE=standalone --restart=always --name ybchen-nacos1 -d -p 8848:8848 nacos/nacos-server
    
    • 1

    2.访问http://localhost:8848/nacos,用户名/密码:nacos/nacos

    在这里插入图片描述
    至此nacos启动成功

    3.搭建springboot项目

    先搭建springboot环境
    pom.xml导入依赖

    
    <dependency>
    	<groupId>com.alibaba.cloudgroupId>
    	<artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
    	<version>2021.1version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    application.yml

    server:
      port: 8080
    
    spring:
      application:
        name: springboot-nacos
      profiles:
        active: dev
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    application-dev.yml

    spring:
      datasource:
        username: root
        password: 123456
    
    • 1
    • 2
    • 3
    • 4

    ConfigController.java

    @RestController
    @RequestMapping("config")
    public class ConfigController {
    
        @Value("${spring.datasource.username}")
        private String username;
    
        @Value("${spring.datasource.password}")
        private String password;
    
        @GetMapping("/datasource")
        public String getMessage() {
            return "
    username:"
    + username + "
    password:"
    + password; } }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    启动访问http://localhost:8080/config/datasource

    4.springboot整合nacos配置中心

    pom.xml加依赖

    <dependency>
    	<groupId>org.springframework.cloudgroupId>
    	<artifactId>spring-cloud-starter-bootstrapartifactId>
    	<version>3.0.4version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    巨坑:这个依赖一定要加!!!springboot不会默认加载bootstrap 文件,需要这个依赖才能加载bootstrap文件,

    新建bootstrap.yml

    spring:
      cloud:
        nacos:
          config:
            server-addr: 127.0.0.1:8848
            # 库存模块
            group: stock
            prefix: test
            file-extension: yml
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    5.controller上加注解@RefreshScope,否则不会自动刷新

    6.在http://localhost:8848/nacos上新建配置

    在这里插入图片描述
    在这里插入图片描述
    在 Nacos Spring Cloud 中,dataId 的完整格式如下:

    ${prefix}-${spring.profiles.active}.${file-extension}
    
    • 1
    • prefix 默认为 spring.application.name 的值,也可以通过配置项spring.cloud.nacos.config.prefix来配置。
    • spring.profiles.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当 spring.profiles.active 为空时,对应的连接符-也将不存在,dataId 的拼接格式变成
      p r e f i x . {prefix}. prefix.{file-extension}
    • file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持properties 和 yaml
      类型。

    group是在bootstrap.yml配置的

    项目会根据Data ID+Group找配置

    7.启动项目

    访问http://localhost:8080/config/datasource,修改配置后,再次访问

    8.命名空间的使用

    在这里插入图片描述
    bootstrap.yml

    spring:
      cloud:
        nacos:
          config:
            server-addr: 127.0.0.1:8848
            # 库存模块
            group: stock
            prefix: test
            file-extension: yml
            namespace: a2c0357f-4e2b-4eb9-852b-b1ca2e8fb22c
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    选择命名空间后,创建配置文件,这个配置文件就归属到这个命名空间下了
    在这里插入图片描述

    项目根据命名空间名+Data ID+Group找配置

    namespcae分环境(开发环境、测试环境)
    group分模块(库存模块、订单模块)

    想通过test.yml线上改切换dev和pro,但没效果
    在这里插入图片描述
    在这里插入图片描述

    二、nacos注册中心

    1.搭建一个消费者项目

    pom.xml

    
    <dependency>
    	<groupId>com.alibaba.cloudgroupId>
    	<artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
    	<version>2021.1version>
    dependency>
    <dependency>
    	<groupId>org.springframework.cloudgroupId>
    	<artifactId>spring-cloud-starter-bootstrapartifactId>
    	<version>3.0.4version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    SpringbootNacosConsumerApplication.java

    @SpringBootApplication
    @EnableDiscoveryClient
    public class SpringbootNacosConsumerApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(SpringbootNacosConsumerApplication.class, args);
        }
    
        @Bean
        public RestTemplate restTemplate() {
            return new RestTemplate();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    NacosConsumerController.java

    @RestController
    public class NacosConsumerController {
        @Autowired
        private RestTemplate restTemplate;
    
        @RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
        public String echo(@PathVariable String str) {
            return restTemplate.getForObject("http://127.0.0.1:8080//echo/" + str, String.class);
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    bootstrap.yml

    spring:
      cloud:
        nacos:
          discovery:
            server-addr: 127.0.0.1:8848
            # 库存模块
            group: order
            namespace: a2c0357f-4e2b-4eb9-852b-b1ca2e8fb22c
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    application.yml

    server:
      port: 8081
    
    spring:
      application:
        name: springboot-nacos-consumer
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2.启动

    在这里插入图片描述

    在这里插入图片描述

    3.负载均衡问题

    但是加上了@LoadBalanced 就报错,折腾了好久没找到原因

    @LoadBalanced
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    @RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
    public String echo(@PathVariable String str) {
        return restTemplate.getForObject("http://springboot-nacos//echo/" + str, String.class);
    }
    
    • 1
    • 2
    • 3
    • 4
    <dependency>
    	<groupId>org.springframework.cloudgroupId>
    	<artifactId>spring-cloud-starter-netflix-ribbonartifactId>
    	<version>2.2.4.RELEASEversion>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    在这里插入图片描述
    有解决兄弟的留言,谢谢

  • 相关阅读:
    七夕 跟mysql 数据库一起度过
    基于python flask的旅游景点评论数据可视化大屏实现,包括数据采集
    LeetCode LCR 103. 零钱兑换【完全背包,恰好装满背包的最小问题】中等
    去掉textarea右下角的图标
    测试人员工作中常用的 git 语句汇总总结
    03 自己写Keil ARM M3汇编的boot,并成功引导main进行打印输出
    文心一言 VS 讯飞星火 VS chatgpt (99)-- 算法导论9.3 5题
    [蓝桥杯]避免常见坑点(输入输出问题、数据溢出问题等)
    虚拟机Linux+Ubuntu操作系统 如何在虚拟机上安装docker VMPro 2024在线激活资源
    软件自动化测试代码覆盖率
  • 原文地址:https://blog.csdn.net/qq_42665745/article/details/127442701