Alibaba微服务组件Nacos注册中心学习笔记

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

1. 什么是 Nacos

什么是 Nacos官方网站:什么是 Nacos

官方一个更易于构建云原生应用的动态服务发现(Nacos Discovery )服务配置(Nacos Config)和服务管理平台。  集 注册中心+配置中心+服务管理 平台

Nacos 的关键特性包括:
服务发现和服务健康监测
动态配置服务
动态 DNS 服务
服务及其元数据管理

2. Nacos注册中心

管理所有微服务、解决微服务之间调用关系错综复杂、难以维护的问题
2.3  核心功能
Nacos Discovery
服务注册 Nacos Client 会通过发送 REST 请求的方式向 Nacos Server 注册自己的服务提供自身的元数据比如 ip
址、端口等信息。 Nacos Server 接收到注册请求后就会把这些元数据信息存储在一个双层的内存 Map 中。
服务心跳 在服务注册后 Nacos Client 会维护一个定时心跳来持续通知 Nacos Server 说明服务一直处于可用状态防
止被剔除。默认 5s 发送一次心跳。
服务同步 Nacos Server 集群之间会互相同步服务实例用来保证服务信息的一致性。   leader    raft    
服务发现 服务消费者 Nacos Client 在调用服务提供者的服务时会发送一个 REST 请求给 Nacos Server 获取上面
注册的服务清单并且缓存在 Nacos Client 本地同时会在 Nacos Client 本地开启一个定时任务定时拉取服务端最新的注
册表信息更新到本地缓存
服务健康检查 Nacos Server 会开启一个定时任务用来检查注册服务实例的健康情况对于超过 15s 没有收到客户端心跳
的实例会将它的 healthy 属性置为 false( 客户端服务发现时不会发现 ) 如果某个实例超过 30 秒没有收到心跳直接剔除该
实例 ( 被剔除的实例如果恢复发送心跳则会重新注册 )

主流的注册中心

CAP    C 一致性 A可用性 P 分区容错性
雪崩保护  
保护阈值 设置0-1之间的值  0.6
临时实例 spring.cloud.nacos.discovery.ephemeral =false,   当服务宕机了也不会从服务列表中剔除
下图代表永久实例

 

健康实例、 不健康实例
健康实例数/总实例数 < 保护阈值`
1/2<0.6
结合负载均衡器 权重的机制  设置的越大

 

3 Nacos Server部署

下载源码编译
源码下载地址 https://github.com/alibaba/nacos/     
可以用迅雷下载 下载安装包, 下载地址 https://github.com/alibaba/Nacos/releases
3.1  单机模式
官方文档 https://nacos.io/zh­cn/docs/deployment.html
解压进入 nacos 目录
单机启动 nacos 执行命令
  bin / startup . sh  m standalone
也可以修改默认启动方式
访问 nocas 的管理端 http://localhost:8848/nacos 默认的用户名密码是  nocas/nocas
3.2 集群模式
官网文档 https://nacos.io/zh­cn/docs/cluster­mode­quick­start.html

4. Spring Cloud Alibaba Nacos快速开始

4.1 Spring Cloud Alibaba版本选型
4.2 搭建Nacos-client服务
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>
    <modules>
        <module>stock-nacos</module>
        <module>order-nacos</module>
    </modules>

    <groupId>com.wang</groupId>
    <artifactId>SpringCloudAlibabaLearn</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>SpringCloudAlibabaLearn</name>
    <packaging>pom</packaging>
    <description>SpringCloudAlibabaLearn</description>

    <properties>
        <java.version>1.8</java.version>
        <spring.cloud.alibaba.version>2.2.6.RELEASE</spring.cloud.alibaba.version>
        <spring.cloud.version>Hoxton.RELEASE</spring.cloud.version>
        <spring.boot.version>2.3.12.RELEASE</spring.boot.version>
    </properties>

    <dependencies>
<!--        SpringBoot场景启动器-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</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>
<!--            Spring-cloudyAlibaba-->
            <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>
<!--springboot的版本管理-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-parent</artifactId>
                <version>${spring.boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

<!--            spring-cloud的版本管理-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring.cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
<!--        打包-->
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.3.12.RELEASE</version>
            </plugin>

        </plugins>
    </build>

</project>
在子模块引入 依赖
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
<!--nacos注册发现依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

    </dependencies>
两个子模块application.yml
server:
  port: 8022
#应用名称nacos会当做服务名称
spring:
  application:
    name: order-nacos
  cloud:
    nacos:
      server-addr: localhost:8848
      discovery:
        username: nacos
        password: nacos
        namespace: public
更多配置 https://github.com/alibaba/spring­cloud­alibaba/wiki/Nacos­discovery

5.编写代码 

5.1order-nacos模块
controllter
package com.wang.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

/**
 * @BelongsProject: SpringCloudAlibabaLearn
 * @BelongsPackage: com.wang.controllter
 * @Author: wang fei
 * @CreateTime: 2023-01-16  16:48
 * @Description: TODO
 * @Version: 1.0
 */
@RestController
@RequestMapping("/order")
public class OrderController {
    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/pay")
    public String pay(){
        String msg = restTemplate.getForObject("http://localhost:8023/stock/reduce", String.class);
        return "success" + "  " + System.currentTimeMillis();
    }
}
OrderApplication
package com.wang;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

/**
 * @BelongsProject: SpringCloudAlibabaLearn
 * @BelongsPackage: com.wang.controller
 * @Author: wang fei
 * @CreateTime: 2023-01-16  16:54
 * @Description: TODO
 * @Version: 1.0
 */
@EnableDiscoveryClient
@SpringBootApplication
public class OrderApplication {
    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }
    @Bean
//    @LoadBalanced //负载均衡
    public RestTemplate restTemplate(RestTemplateBuilder  builder){
        RestTemplate restTemplate = builder.build();
        return restTemplate;
    }
}
5.2 stock -nacos模块
controllter
package com.wang.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @BelongsProject: SpringCloudAlibabaLearn
 * @BelongsPackage: com.wang.controller
 * @Author: wang fei
 * @CreateTime: 2023-01-16  16:51
 * @Description: TODO
 * @Version: 1.0
 */
@RestController
@RequestMapping("/stock")
public class StockController {
    @GetMapping("/reduce")
    public String reduce() {
        System.out.println("库存减少");
        return "reduce";
    }
}

StockApplication
package com.wang;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * @BelongsProject: SpringCloudAlibabaLearn
 * @BelongsPackage: com.wang.controller
 * @Author: wang fei
 * @CreateTime: 2023-01-16  16:54
 * @Description: TODO
 * @Version: 1.0
 */

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

6.运行结果

启动ancos

 

启动SpringBoot

访问 http://2.0.0.1:8848/nacos/index.html

 

 

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

“Alibaba微服务组件Nacos注册中心学习笔记” 的相关文章