Spring Cloud Alibaba Nacos 简易入门

1.Nacos 简介

为什么叫Nacos

前四个字母为Nameing和Configuration的前两个字母,最后的s为Service。

是什么?

Nacos(Nacos:Dynamic Naming and Configuration Service)是一个更易于构建原生应用的动态服务发现、配置管理和服务管理平台。Nacos就是注册中心+配置中心的组合,它等价于Eureka+Config+Bus

能干嘛?

它能替代Eureka做服务中心,替代Config做微服务配置中心。

2.安装Nacos

安装之前首先下载Nacos,下载地址https://github.com/alibaba/nacos/releases 。这里注意如果是Windows(有Java+MySQL8.0以下版本环境)可以下载完开箱即用。Windows启动如下命令。

startup.cmd -m standalone

如果你的MySQL版本是8.x,使用方法如下:
1.下载源码git clone https://github.com/alibaba/nacos.git
2.用Idea打开项目,修改pom.xml里面的MySQL版本

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <!-- <version>5.1.34</version> -->
    <version>8.0.18</version>
</dependency>

3.修改MySQL驱动 com/alibaba/nacos/naming/healthcheck/MysqlHealthCheckProcessor.java

// import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;原数据在24行
//将其替换
import com.mysql.cj.jdbc.MysqlDataSource;

4.重新编译

mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U

5.将编译好的文件复制到你所要存放的nacos的地方:

cp  distribution  xxx
mv distribution nacos

这时候就相当于你下载了一个支持MySQL8.xNacos。你可以用相对应得命令启动。
已经编译好下载地址:https://pan.baidu.com/s/1xVeg0t98BKlUbgvQMzTBxA 提取码:vssl

如果是Linux/Mac,启动命令如下。

sh startup.sh -m standalone

启动之后可以访问Nacos客户端,默认用户名密码都是nacos
在这里插入图片描述

3.Nacos做注册中心

服务提供方

1.创建springboot项目并添加依赖

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud-alibaba.version>2.2.0.RELEASE</spring-cloud-alibaba.version>
    </properties>

    <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-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <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>

2.配置文件配置


server.port=9001
spring.application.name=nacos-provider
# nacos注册中心地址
spring.cloud.nacos.discovery.server-addr=localhost:8848

3.启动文件添加注解

@EnableDiscoveryClient
@SpringBootApplication
public class AlibabaProviderApplication {

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

}

4.提供消费接口

@RestController
public class HelloController {

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

    @GetMapping("/provider/hello")
    public String hello(){
        return "nacos1 hello"+serverPort;
    }
}

5.再创建一个项目如上配置用于后面做负载均衡测试,或者如下图直接拷贝虚拟端口映射
在这里插入图片描述
6.启动项目测试提供的接口:http://localhost:9001/provider/hello
在这里插入图片描述

服务消费方

1.创建springboot项目并添加依赖,这里依赖与服务提供方相同
2.配置application.properties

server.port=9011
spring.application.name=nacos-consumer
spring.cloud.nacos.discovery.server-addr=localhost:8848
        
#消费者将要去访问的微服务名称(注册成功进nacos的微服务提供者)
service-url.nacos-user-service=http://nacos-provider

3.配置注册RestTemplate进行服务间接口调用

@Configuration
public class ApplicationContextConfig {

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

4.调用服务提供方接口

@RestController
public class OrderNacosController {
    @Autowired
    RestTemplate restTemplate;

    @Value("${service-url.nacos-user-service}")
    private String serverUrl;
    
    @GetMapping("/consumer/hello")
    public String hello(){
        return restTemplate.getForObject(serverUrl+"/provider/hello",String.class);
    }

}

5.启动项目测试:http://localhost:9011/consumer/hello


各个服务注册中心比较(Nacos CA/AP都支持):
在这里插入图片描述
服务出现故障的时候,CP是直接拒绝服务的,它保证一致性,AP则是保证可用性,允许一段时间出现数据不一致,但最终会趋向一致。

4.Nacos做配置中心

1.创建springboot项目并引入依赖

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud-alibaba.version>2.2.1.RELEASE</spring-cloud-alibaba.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <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-config</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>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <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>

2.对两个配置文件进行配置bootstrap.propertiesapplication.properties,boostrap加载优先级高于application
bootstrap.properties:


server.port=3377

spring.application.name=nacos-config-client
# 注册中心
spring.cloud.nacos.discovery.server-addr=localhost:8848
# 配置中心
spring.cloud.nacos.config.server-addr=localhost:8848
# 这里指定的文件格式需要和nacos上新建的配置文件后缀相同,否则读不到
spring.cloud.nacos.config.file-extension=properties
# 分组配置
#spring.cloud.nacos.config.group=DEV_GROUP
# 命名空间配置
# spring.cloud.nacos.config.namespace=782bd58a-0902-4ac4-bef3-f145806eff3c

# 配置文件名称拼接公式,拼接后与nacos中相对于
#  ${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}

详细说明参考https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html

application.properties配置:

spring.profiles.active=dev

3.定义接口获取配置信息

@RestController
@RefreshScope  //支持nacos动态刷新
public class ConfigController {

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

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

4.定义配置信息
在这里插入图片描述
在这里插入图片描述
上面配置都是默认分组,我们也可以自定义分组()和命名空间(namespace)。

5.配置好之后启动调用接口获取配置信息http://localhost:3377/config/info
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41262903/article/details/106546679