cmd启动nacos

startup.cmd -m standalone //单节点服务器实例

微服务中注册nacos

  1. 首先父工程中指定 springcloudalibaba 的版本

             <!--nacos版本管理-->
             <dependency>
                 <groupId>com.alibaba.cloud</groupId>
                 <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                 <version>2.2.5.RELEASE</version>
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
  2. 微服务中加入nacos依赖, 同时注释掉eureka的依赖

         <!-- Nacos Discovery 用于服务发现 -->
         <dependency>
             <groupId>com.alibaba.cloud</groupId>
             <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
         </dependency>
  3. yml中连接到nacos

    spring:
      datasource:
     url: jdbc:mysql://localhost:3306/cloud_user?useSSL=false
     username: root
     password: 123456
     driver-class-name: com.mysql.jdbc.Driver
      application:
     name: userservice #user服务
      cloud:
     nacos:
       server-addr: localhost:8848 #nacos服务地址
  4. 配置集群: yml文件中修改nacos的cluster-name

      cloud:
     nacos:
       server-addr: localhost:8848 #nacos服务地址
       discovery:
         cluster-name: SH #集群名: 杭州

远程调用

远程调用仍然需要RestTemplate

    /**
     * 创建RestTemplate并注入Spring容器
     */
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

//请求示例
        String url = "http://userservice/user/" + userId;//构建url 让temple访问
        User user = restTemplate.getForObject(url, User.class);//使用restTemplate发送请求

负载算法

  1. 首先RestTemplate仍然需要 @LoadBalanced
  2. 然后设置优先同集群访问(首先应确保存在同集群服务器)

    userservice:
      ribbon:
     NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # Nacos 同集群调用策略

namespace

不同namespace下的服务无法相互调用

(非)临时实例

cloud:
  nacos:
    server-addr: localhost:8848 # nacos服务地址
    discovery:
      cluster-name: HZ # 集群名称
      namespace: 2741507c-3068-4304-8fe7-519f47a6b77b # 设置namespace
      service:
        # 设置为非临时实例
        ephemeral: false

添加nacos配置

  1. nacos远程配置依赖

         <!--Nacos配置管理-->
         <dependency>
             <groupId>com.alibaba.cloud</groupId>
             <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
         </dependency>
  2. resource下创建 bootstrap.yml :

一定要指定 name , active , server-addr , file-extension(后缀名)

spring:
  application:
    name: userservice
  profiles:
    active: dev # 环境
  cloud:
    nacos:
      server-addr: localhost:8848 # nacos地址
      config:
        file-extension: yaml #配置文件后缀名

nocos网页配置:

  1. 命名规则

    userservice-dev.yaml   //测试环境配置
    userservice.yaml    //通用配置
  2. 内容

    pattern:
      dateformat: yyyy/MM/dd日 HH:mm:ss

    远程(特殊环境)配置 > 远程配置 > 本地配置

配置远程推送

@Value(需要手动开启推送)

首先, 在需要配置的类中注入配置量

    @Value("${pattern.dateformat}")
    private String dataformat;

然后, 在这个类上添加注解 @RefreshScope

@ConfigurationProperties

@ConfigurationProperties 注解是 Spring Framework 中用于将外部配置(如 application.properties 或 application.yml 文件中的属性)映射到 Java 类的一个强大工具。通过使用这个注解,可以将一组相关的配置属性绑定到一个 POJO(Plain Old Java Object)类中,从而方便地管理和使用这些配置。

[label color="default"]pojo类[/lab
el] 示例

package cn.itcast.user.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Data
@Component
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {
    private String dateformat;
    private String envSharedValue;
}

这样子不用手动开启推送了, nacos在云端发布新配置后本地会自动使用