Spring Cloud Alibaba

【Spring Cloud Alibaba】Nacos

2019-10-30  本文已影响0人  扮鬼之梦

《Nacos》

启动注册中心

您需要先下载 Nacos 并启动 Nacos server。操作步骤参见 Nacos 快速入门

官方文档

Nacos Spring Cloud 快速开始

服务发现Demo

关系图

版本选择

我使用的是下图中标记的版本,使用其他版本请根据 版本说明 Wiki 来选择

创建父pom

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.9.RELEASE</version>
        <relativePath/> 
    </parent>

    <groupId>com.thy</groupId>
    <artifactId>thy-base</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>
    <name>父pom</name>
    <description>依赖版本管理</description>

    <properties>
        <java.version>1.8</java.version>
        <maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
        <spring-boot.version>2.1.9.RELEASE</spring-boot.version>
        <spring.cloud.version>Greenwich.SR3</spring.cloud.version>
        <spring.cloud.alibaba.version>2.1.0.RELEASE</spring.cloud.alibaba.version>
    </properties>

    <dependencyManagement>
      <dependencies>
          <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-dependencies</artifactId>
              <version>${spring-boot.version}</version>
              <type>pom</type>
              <scope>import</scope>
          </dependency>
          <dependency>
              <groupId>org.springframework.cloud</groupId>
              <artifactId>spring-cloud-dependencies</artifactId>
              <version>${spring.cloud.version}</version>
              <type>pom</type>
              <scope>import</scope>
          </dependency>
          <dependency>
              <groupId>com.alibaba.cloud</groupId>
              <artifactId>spring-cloud-alibaba-dependencies</artifactId>
              <version>${spring.cloud.alibaba.version}</version>
              <type>pom</type>
              <scope>import</scope>
          </dependency>
      </dependencies>
      </dependencyManagement>


</project>

服务的提供者

1.添加依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <!-- 父pom -->
    <parent>
        <groupId>com.thy</groupId>
        <artifactId>thy-base</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath/> 
    </parent>

    <artifactId>nacos-provider</artifactId>
    <name>nacos-provider</name>
    <description>Demo project for Spring Boot</description>


    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        
        <!-- 实现服务的注册与发现的依赖 -->
        <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-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

2.yml配置

server: 
  port: 8070 #端口

spring: 
  application:
    name: service-provider #服务名
  cloud: 
    nacos: 
      discovery: 
        server-addr: 127.0.0.1:8848 #配置注册中心地址

3.开启服务注册发现功能

通过 Spring Cloud 原生注解 @EnableDiscoveryClient 开启服务注册发现功能,并提供一个测试方法

@SpringBootApplication
@EnableDiscoveryClient
public class NacosProviderApplication {

    public static void main(String[] args) {
        SpringApplication.run(NacosProviderApplication.class, args);
    }

    @RestController
    class EchoController {
        @RequestMapping(value = "/echo/{string}", method = RequestMethod.GET)
        public String echo(@PathVariable String string) {
            return "Hello Nacos Discovery " + string;
        }
    }
}

服务的消费者

1.添加依赖,同服务的提供者

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    
    <parent>
        <groupId>com.thy</groupId>
        <artifactId>thy-base</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath/> 
    </parent>

    <artifactId>nacos-consumer</artifactId>
    <name>nacos-consumer</name>
    <description>Demo project for Spring Boot</description>


    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        
        <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-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

2.yml配置

server: 
  port: 8080

spring: 
  application:
    name: service-consumer
  cloud: 
    nacos: 
      discovery: 
        server-addr: 127.0.0.1:8848

3.开启服务注册发现功能

通过 Spring Cloud 原生注解 @EnableDiscoveryClient 开启服务注册发现功能。给 RestTemplate 实例添加 @LoadBalanced 注解,开启 @LoadBalanced 与 Ribbon 的集成。

@SpringBootApplication
@EnableDiscoveryClient
public class NacosConsumerApplication {

    public static void main(String[] args) {
        SpringApplication.run(NacosConsumerApplication.class, args);
    }

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

    @RestController
    public class TestController {

        private final RestTemplate restTemplate;

        @Autowired
        public TestController(RestTemplate restTemplate) {this.restTemplate = restTemplate;}

        @RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
        public String echo(@PathVariable String str) {
            return restTemplate.getForObject("http://service-provider/echo/" + str, String.class);
        }
    }

}

测试

启动 ProviderApplication 和 ConsumerApplication ,在Nacos的管理界面中就能看到这两个服务

调用消费者的接口http://localhost:8080/echo/2018,返回内容为 Hello Nacos Discovery 2018

配置管理

1.添加依赖

父pom同服务发现的父pom,子pom添加以下依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

2.创建bootstrap.yml

server:
  port: 8080
  
spring:
  application:
    name: service-consumer #服务名
  cloud: 
    nacos: 
      discovery: 
        server-addr: 127.0.0.1:8848
      config: 
        server-addr: 127.0.0.1:8848 #配置管理中心地址
        file-extension: yaml #配置内容的数据格式

default-password: 123456 #需要自动更新的配置

3.获取配置时,通过 Spring Cloud 原生注解 @RefreshScope 实现配置自动更新

@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController {
    
    @Value("${default-password}")
    private String defaultPassword;

    @RequestMapping("/getDefaultPassword")
    public String getDefaultPassword() {
        return defaultPassword;
    }
    
}

4.启动项目

访问http://localhost:8080/config/getDefaultPassword,结果为123456

5.在Nacos管理页面上添加配置

配置参数含义见官方文档


添加成功后,再次访问http://localhost:8080/config/getDefaultPassword,结果为888888
上一篇 下一篇

猜你喜欢

热点阅读