42、SpringCloud Alibaba Nacos 注册中心和配置中心

1、创建两个服务提供者cloudalibaba-provider-payment9001 和 cloudalibaba-provider-payment9002 服务消费者cloudalibaba-consumer-order83 实现基于Nacos为注册中心的负载均衡调用

2、创建 cloudalibaba-provider-payment9001 服务提供者

编写pom.xml添加依赖

<dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

        <dependency>
            <groupId>com.atguigu.springcloud</groupId>
            <artifactId>cloud-api-commons</artifactId>
            <version>${project.version}</version>
        </dependency>
    </dependencies>

编写application.yml 配置文件

server:
  port: 9001

spring:
  application:
    name: alibaba-provider-payment

  cloud:
    nacos:
      discovery:
        server-addr: 8.129.215.115:8848

management:
  endpoints:
    web:
      exposure:
        include: "*"

编写主启动类

@SpringBootApplication
@EnableDiscoveryClient
public class NacosPaymentMain9001 {
    public static void main(String[] args) {
        SpringApplication.run(NacosPaymentMain9001.class, args);
    }
}

编写controller业务类

@RestController
public class PaymentController {

    @Value("${server.port}")
    private String serverPort;

    @GetMapping(value = "/payment/nacos/{id}")
    public String paymentNacos(@PathVariable("id")Integer id) {
        return "webcome to Nacos ServerPort: " + serverPort +"\t" + "id: "+ id;
    }
}

创建 cloudalibaba-provider-payment9001 服务提供者 和上面一样,只修改端口号就省略

3、创建cloudalibaba-consumer-order83 服务消费者

编写pom.xml添加依赖

<dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

        <dependency>
            <groupId>com.atguigu.springcloud</groupId>
            <artifactId>cloud-api-commons</artifactId>
            <version>${project.version}</version>
        </dependency>
    </dependencies>

编写application.yml配置文件

server:
  port: 83

spring:
  application:
    name: alibaba-consumer-order

  cloud:
    nacos:
      discovery:
        server-addr: 8.129.215.115:8848

management:
  endpoints:
    web:
      exposure:
        include: "*"

provider-service:
  payment-url: http://alibaba-provider-payment

编写主启动类

@SpringBootApplication
@EnableDiscoveryClient
public class NacosOrderApplication83 {
    public static void main(String[] args) {
        SpringApplication.run(NacosOrderApplication83.class,args);
    }
}

编写RestTempalte 配置类

@Configuration
public class RestConfig {

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

编写controller 业务类,消费者服务调用生产者服务

@RestController
@Slf4j
public class NacosOrderController {

    @Resource
    private RestTemplate restTemplate;

    @Value("${provider-service.payment-url}")
    private String paymentServiceUrl;

    @GetMapping(value = "/consumer/payment/nacos/{id}")
    public String paymentInfo(@PathVariable("id") Integer id) {
        String result = restTemplate.getForObject(paymentServiceUrl + "/payment/nacos/" + id, String.class);
        return result;
    }
}

测试地址:http://localhost:83/consumer/payment/nacos/666

4、使用Nacos的配置中心 创建cloudalibaba-config-client3377 主要演示如何使用配置中心,和自动动态刷新功能

编写pom.xml添加依赖

<dependencies>
        <!-- Nacos 配置中心 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <!-- Nacos 注册中心 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

        <dependency>
            <groupId>com.atguigu.springcloud</groupId>
            <artifactId>cloud-api-commons</artifactId>
            <version>${project.version}</version>
        </dependency>
    </dependencies>

编写bootstrap.yml 配置文件 公共的配置信息 并在Nacos 控制窗口配置管理新建一个文件alibaba-config-client-dev.yaml 文件

server:
  port: 3377

spring:
  application:
    name: alibaba-config-client

  cloud:
    nacos:
      discovery:
        server-addr: 8.129.215.115:8848  #注册中心地址
      config:
        server-addr: 8.129.215.115:8848 #配置中心地址
        file-extension: yaml  #后缀名

management:
  endpoints:
    web:
      exposure:
        include: "*"

alibaba-config-client-dev.yaml 内容

config: 
  info: from nacos config center alibaba-config-client-dev.yaml,version = 2

 

编写application.yml 自己独有的配置信息

spring:
  profiles:
    active: dev  #使用哪个环境 dev sit prod

编写主启动类

@SpringBootApplication
@EnableDiscoveryClient
public class NacosConfigClientMain3377 {
    public static void main(String[] args) {
        SpringApplication.run(NacosConfigClientMain3377.class, args);
    }
}

编写controller 业务类

@RestController
@RefreshScope //自动刷新
public class ConfigClientController {

    @Value("${config.info}")
    private String configInfo;

    @GetMapping(value = "/config/info")
    public String getConfigInfo () {
        return configInfo;
    }
}

测试地址:http://localhost:3377/config/info 然后 修改alibaba-config-client-dev.yaml 文件的内容 验证是否动态刷新

 5、Nacos 配置中心的分类配置

根据data-id 读取不同的配置文件:默认命名空间+ 默认分组 + data-id 读取配置

 

springcloud alibaba 版本是2.2.1 以下版本的配置

 

 5、最重要的:Nacos 集群配置 和 持久化配置

搭建步骤参考:https://www.cnblogs.com/dw3306/p/12961353.html  我就不记录了

需要在Linux 上有 Mysql  nginx 3个Nacos的节点  

已经下载好了nacos了 进入自己的网盘,下载的版本为:1.2.0

posted @ 2021-07-02 14:12  shunnWcs  阅读(98)  评论(0)    收藏  举报