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

目录

1. 什么是 Nacos

2. Nacos注册中心

3.主流的注册中心

4.Nacos Server部署

5. Spring Cloud Alibaba Nacos快速开始

6.编写代码 

7.运行结果


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 秒没有收到心跳,直接剔除该
实例 ( 被剔除的实例如果恢复发送心跳则会重新注册 )

3.主流的注册中心

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

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

4.Nacos Server部署

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

5. Spring Cloud Alibaba Nacos快速开始

5.1 Spring Cloud Alibaba版本选型
5.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

6.编写代码 

6.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;
    }
}
6.2stock-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);
    }
}

7.运行结果

启动ancos

启动SpringBoot

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Traveler飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值