目录

SpringCloud Alibaba微服务架构图

Alibaba微服务组件-Nacos注册中心-初始Nacos_微服务

Nacos官方文档

官方参考文档:​​https://nacos.io/zh-cn/docs/quick-start.html​

简介

1、什么是Nacos

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

2、Nacos的特性

  • 服务发现和服务健康监测
  • 动态配置服务
  • 动态DNS服务
  • 服务及其元数据管理

一、Nacos注册中心

1.1 核心功能

Nacos Descovery
服务注册: Nacos Client 会通过发送REST请求的方式向Nacos Server注册自己的服务,提供自身的元数据,比如IP地址,端口等信息。NacosServer接收到注册请求后,就会把这些元数据信息存储在一个双层的内存Map中。
服务心跳: 在服务注册后,Nacos会维护一个定时心跳来持续通知Nacos Server,说明服务时一直处于可用状态,防止被剔除。默认是5s发送一次心跳
服务同步: Nacos Server集群之间会相互同步服务实例,用来保证服务信息的一致性。leader,raft
服务发现: 服务消费者(Nacos Client) 再调用服务提供者提供的服务的时候,会先发送一个REST请求给Nacos Server,获取上面注册的服务清单,并且缓存在Nacos Client的本地,同时会在Nacos Client本地开启一个定时拉去服务端的注册的表信息更新本地缓存
服务健康检查: nacos Server会开启一个定时任务来检查注册服务实例的健康状况,对于 ​超过15s​​ 没有收到客户端心跳的实例会将他的 ​healthy属性​​ 设置成 ​false​​(客户端发现时不会发现这个服务)如果这个实力 ​超过30s

1.2 主流的注册中心

CAP C:一致性;A:可用性;P:分区容错性

大多数主流的注册中心都是实现了AP Nacos 支持CP 和AP的切换,你默认是AP

Alibaba微服务组件-Nacos注册中心-初始Nacos_git_02

三、Nacos Serevr部署

这里为了方便我在日后学习Springloud Alibaba2.2.5RELEASE版本
所以这里需要找到与之对应的版本组件,具体参考如下:

SpringCloud Alibaba Version

Sentinal Version

Nacos version

RocketMQ Version

Dubbo version

Seata Version

2.2.5RELAEASE

1.8.0

1.4.1

4.4.0

2.7.8

1.3.0

3.1 下载源码编译

源码下载地址: ​​https://github.com/alibaba/nacos/releases​​,自行选择源码或者编译过的安装包

3.2 安装

安装

Linux版本安装

1、安装jdk

[root@gitlab ~]# yum -y install java-1.8.0-openjdk*

2、安装nacos-启动命令(standalone代表着单机模式运行,非集群模式)

  • 解压:进入到Naocs的目录下
[root@gitlab ~]# tar zxf nacos-server-1.3.1.tar.gz 
[root@gitlab ~]# cd nacos/bin/
  • 单机启动Nacos
[root@gitlab bin]# sh startup.sh -m standalone

windows版本安装

  • 解压安装包
  • 进入到bin目录下,修改startup.cmd文件里的启动方式:Nacos默认的启动方式是集群(cluster)的方式,修改为的单机的方式(standalone)
  • Alibaba微服务组件-Nacos注册中心-初始Nacos_git_03

  • 启动Nacos,双击startup.cmd 关闭Nacos 双击shutdown.cmd
  • Alibaba微服务组件-Nacos注册中心-初始Nacos_spring cloud_04

启动完成后会输出一句话:

Alibaba微服务组件-Nacos注册中心-初始Nacos_git_05

  • 登录Nacos的网址查看,Nacos管理平台的登录页面
  • Alibaba微服务组件-Nacos注册中心-初始Nacos_java_06

默认的登录密码和账号:nacos

Alibaba微服务组件-Nacos注册中心-初始Nacos_spring_07


也可以修好该默认的启动方式

Nacos默认端口为8848

四、Nacos Client部署

Alibaba微服务组件-Nacos注册中心-初始Nacos_spring cloud_08

4.1 引入依赖

1️⃣在Eclipse里面新建一个Maven的父级工程,以及搭建两个子服务的工程分别为:1、order订单2、stock库存:目录如下:

Alibaba微服务组件-Nacos注册中心-初始Nacos_spring_09

🔥父Pom文件中支持SpringCloud& SpringCloud Alibaba 引入依赖

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.11.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>


<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring.cloud-version>Hoxton.SR8</spring.cloud-version>
</properties>

<!--子模块-->
<modules>
<module>DHC_SpringCloud_NacosConfiguration</module>
<module>DHC_SpringCloud_NacosOrder</module>
<module>DHC_SpringCloud_NacosStock</module>
</modules>

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

<!-- springcloud alibaba -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.5.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>

</dependencies>
</dependencyManagement>

<dependencies>
<!-- springBoot -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.0.4.RELEASE</version>
</dependency>
<!-- json -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
</dependencies>

3️⃣在子模块中 添加相关的nacos依赖

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

4️⃣编写相应的Nacos连接参数配置以及SpringBoot服务的相关配置
Nacos-Order.yml

server:
port: 8010 # 服务访问端口
# 应用程序名称 nacos会以改名曾在当下服务列表里注册服务
spring:
application:
name: order-service # 服务的名称
cloud:
nacos:
server-addr: 127.0.0.1:8848 # nacos登陆的ip地址
discovery:
username: user # 登录nacos的管理页面的账号
password: user # 登录密码
namespace: public # 默认是public 也可以不配置

Nacos-Stock.yml

server:
port: 8011 # 服务访问端口
# 应用程序名称 nacos会以改名曾在当下服务列表里注册服务
spring:
application:
name: stock-service # 服务的名称
cloud:
nacos:
server-addr: 127.0.0.1:8848 # nacos登陆的ip地址
discovery:
username: user # 登录nacos的管理页面的账号
password: user # 登录密码
namespace: public # 默认是public 也可以不配置

5️⃣编写Nacos的服务端的相关服务以及服务消费者的相关接口调用操做
StockController

@RestController
@RequestMapping("/stock")
public class StockController {

@RequestMapping("/reduct")
public String name() {
return "减扣库存";
}
}

OrderController

@RestController
@RequestMapping("/order")
public class OrderController {

@Autowired
RestTemplate restTemplate;

@RequestMapping("/add")
public String add() {
System.out.println("下单成功!");
String msg = restTemplate.getForObject("http://stock-service/stock/reduct", String.class);
// String msg = "你好 Nacos";
return "hello world"+msg;
}
}

在服务的调用者(消费者的启动类上注意有的版本需要写一个注解​​@@EnableDiscoveryClient​​)

注意:在Nacos1.4版本以后,就不需要使用@EnableDiscoveryClient的注解

@SpringBootApplication
@EnableDiscoveryClient // nacos版本在1.4以后就可以不用添加 表示nacos启动客户端
public class OrderApplication {

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

@Bean
@LoadBalanced // Nacos所提供的负载均衡器的注解
public RestTemplate restTemplate(RestTemplateBuilder builder) {
RestTemplate restTemplate = builder.build();
return restTemplate;
}
}

6️⃣启动服务

Alibaba微服务组件-Nacos注册中心-初始Nacos_微服务_10


访问localhost:8010/order/add查看:

Alibaba微服务组件-Nacos注册中心-初始Nacos_spring_11


Alibaba微服务组件-Nacos注册中心-初始Nacos_java_12