SpringBoot集成Nacos

SpringBoot集成Nacos

Nacos启动/关闭

#先启动mysql
systemctl status mysql
systemctl start mysql

#跳转到对应目录下
[root@hadoop100 nacos]# cd /opt/software/nacos/bin

#单机模式
[root@hadoop100 bin]# ./startup.sh -m standalone

#集群模式
[root@hadoop100 bin]# ./startup.sh 或者 -p+端口号

#关闭nacos
[root@hadoop100 bin]# ./shutdown.sh

SpringBoot动态引入Nacos配置

使用pom文件动态导入到application.yml中,实现数据隔离+环境切换

1、父pom中引入对资源文件的过滤处理,替换占位符

  <build>
    <resources>
      <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
      </resource>
    </resources>
  </build>

2、声明好资源配置数值

  <profiles>
    <!-- 开发 -->
    <profile>
      <id>dev</id>
      <properties>
        <!--当前环境-->
        <profile.name>dev</profile.name>
        <!--Nacos服务地址-->
        <config.server-addr>192.168.xxx.xxx:8848</config.server-addr>
        <!--Nacos配置中心命名空间,-->
        <config.namespace>257a31db-60ea-452f-bd18-c836d53e6faf</config.namespace>
        <!--Nacos配置分组名称-->
        <config.group>DEFAULT_GROUP</config.group>
        <!--Nacos用户名-->
        <config.username>nacos</config.username>
        <!--Nacos密码-->
        <config.password>nacos</config.password>
      </properties>
    </profile>
    <!-- 测试 -->
      
    <!-- 生产 -->
   </profiles>

3、appliacton.yml声明

server:
  port: 8000
spring:
  application:
    name: service-order
  profiles:
    active: @profile.name@

  cloud:
    nacos:
      server-addr: @config.server-addr@
      username: @config.username@
      password: @config.password@
      config:
        import-check:
          enabled: false
        namespace: @config.namespace@
        group: @config.group@
      discovery:
        namespace: @config.namespace@
        group: @config.group@

  config:
    import:
      - optional:nacos:service-order.yml
      - optional:nacos:service-order-@profile.name@.yml


4、maven选择相应环境构建,启动项目

在这里插入图片描述

Nacos的远程调用和配置监听

参考尚硅谷教程
https://www.bilibili.com/video/BV1UJc2ezEFU

远程调用

下单场景

在这里插入图片描述

  private Product getProductInfo(Long pid) {
    //获取该服务的所有实例
    // List<ServiceInstance> instances = discoveryClient.getInstances("service-product");
    //取第一个实例
    //ServiceInstance serviceInstance = instances.get(0);
    //拼接出商品服务的远程url
    // 传统方法是通过实例去拿到ip端口拼接,这里声明了负载均衡注解后只需要写服务名称即可
    String url = "http://service-product/product/getById?id={productId}";
    Map<String, Long> map = new HashMap<>();
    map.put("productId", pid);
    return restTemplate.getForObject(url, Product.class, map);
  }
@Configuration
public class RestTemplateConfig {

  @Bean
  @LoadBalanced
  public RestTemplate restTemplate(){
    return new RestTemplate();
  }

}

Nacos配置监听

  @Bean
  ApplicationRunner applicationRunner(NacosConfigManager nacosConfigManager){
    return new ApplicationRunner() {
      @Override
      public void run(ApplicationArguments args) throws Exception {
        ConfigService configService = nacosConfigManager.getConfigService();
        configService.addListener("service-order.yml", "DEFAULT_GROUP", new Listener() {
          @Override
          public Executor getExecutor() {
            return  Executors.newFixedThreadPool(1);
          }

          @Override
          public void receiveConfigInfo(String s) {
            System.out.println(s);
            System.out.println("配置变动监听");
          }
        });
        System.out.println("======");
      }
    };
  }

Nacos热点问题

1、注册中心宕机,远程调用还能成功吗?

  • 调用过:远程调用不在依赖注册中心,可以通过(存在缓存)
  • 没调用过:(第一次发起远程调用)不能通过
    在这里插入图片描述

2、Nacos中的数据集和 application.próperties 有相同的 配置项,哪个生效?

在这里插入图片描述

命令行参数 > 系统属性 > 环境变量 > Nacos 配置 > 本地配置文件

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值