Cloud Alibaba Nacos作为服务注册中心

一、基础概述

谦虚一点,Nacos是Spring Cloud Alibaba最重要的组件之一;

1、Nacos 名字的由来?

前四个字母为:Naming + Configuration 的前两个字母, 最后一个s为Service;

Nacos是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台, Nacos 就是服务注册中心+配置中心的组合;

Nacos = Eureka + Config + Bus

2、官网:

http://nacos.io

3、下载地址:

https://github.com/alibaba/nacos/releases

本次我们选择 1.1.4 版本;


二、Nacos的安装

我们本次选择的版本是Nacos 1.1.4

下载下来的文件解压后目录如下:

2.jpg

3.jpg

使用startup.cmd运行即可,启动的Banner:

4.jpg

成功启动后,使用: http://localhost:8848/nacos 访问控制台:默认账号密码都为: nacos

5.jpg


三、Nacos之服务提供者注册

1、新建服务cloudalibaba-provider-payment9001

pom.xml:

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>cloud2020</artifactId>
        <groupId>com.jiguiquan.springcloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloudalibaba-provider-payment9001</artifactId>

    <dependencies>
        <!--springcloud alibaba nacos-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <!--公共服务模块依赖-->
        <dependency>
            <groupId>com.jiguiquan.springcloud</groupId>
            <artifactId>cloud-api-commons</artifactId>
            <version>${project.version}</version>
        </dependency>

        <!--springboot项目web和actuator最好一起走-->
        <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>
    </dependencies>
</project>

2、配置文件:application.yml:

server:
  port: 9001

spring:
  application:
    name: nacos-payment-provider
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

management:
  endpoints:
    web:
      exposure:
        include: '*'

3、主启动类:com.jiguiquan.springcloud.alibaba.PaymentMain9001.java

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

4、业务类controller.PaymentCOntroller.java:

@RestController
public class PaymentController {
    @Value("${server.port}")
    private String serverPort;

    @GetMapping("/payment/nacos/{id}")
    public String getPayment(@PathVariable("id") Integer id){
        return "Nacos registry, serverPort:" + serverPort + "\t id:" + id;
    }
}

5、启动测试,启动成功后,在nacos的服务列表找那个,就可以看到我们的payment9001服务

7.jpg

6、Nacos自带负载均衡功能,为了方便延时,我们参照9001新建一个一模一样的9002工程;


四、Nacos之服务消费者注册和负载均衡

1、新建模块cloudalibaba-consumer-nacos-order83

所有的pom.xml和application.yml与上面几乎一致:

server:
  port: 83

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

#消费者将要去访问的微服务名称(注册成功进nacos的微服务提供者),当然也可以不配,写在代码里面
service-url:
  nacos-user-service: http://nacos-payment-provider

2、主启动类:略

3、使用Ribbon需要注入RestTemplate配置类:

@Configuration
public class ApplicationContextConfig {
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
}

3、业务类:controller.OrderController.java:

@RestController
public class OrderController {
    @Value("${service-url.nacos-user-service}")
    private String serverUrl;

    @Autowired
    private RestTemplate restTemplate;

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

4、启动,进行测试,启动成功后,进入Nacos控制台,可以看到当前有哪些服务:

8.jpg

访问以下链接: http://localhost:83/consumer/payment/nacos/666 ,访问多次,看看是否负载均衡:

9.jpg

10.jpg

显然Nacos默认是支持负载均衡的(因为Nacos整合了Ribbon)


五、Nacos作为服务注册中心对比提升

1、Nacos支持 AP 和 CP 两种模式的自由切换

11.jpg

2、Nacos与其它注册中心的特性对比表

12.jpg

这张对比表,太明显,Nacos强太多,什么都支持,所以如果可以自由选择,一定要选择Nacos!!!

3、Nacos支持AP和CP模式的切换——如何操作?

C 是所有节点在同一时间看到的数据时一致的;(强一致性)

A 的定义则是所有的请求都会受到相应;(高可用性)

那么首先 AP 和 CP,我们如何确定选择哪种模式呢?

  • 一般来说,如果不需要存储服务级别的信息,且服务实例是通过 Nacos-client 注册,并能够保持心跳上报,那么就可以选择 AP 模式;当前主流的服务如:SpringCloud和Dubbo服务,都适用于AP模式;AP模式为了服务的高可用性,而减弱了强一致性,因此AP模式下只支持注册临时实例

  • 如果需要在服务级别编辑(编排)或者存储配置信息,那么CP是必须的K8S服务和DNS服务则适用于CP模式;CP模式下只支持注册持久化实例,此时则是以 Raft 协议为集群运行模式,该模式下注册实例前必须先注册服务,如果服务不存在,则会返回错误;

切换方式:

curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP'

个人此项目代码地址(持续更新):

https://github.com/jiguiquan/cloud2020

jiguiquan@163.com

文章作者信息...

留下你的评论

*评论支持代码高亮<pre class="prettyprint linenums">代码</pre>

相关推荐