02_Alibaba微服务组件Nacos注册中心

文章目录

    • Alibaba微服务组件Nacos注册中心
      • 注册中心演变过程
        • 注册中心核心功能
        • 主流的注册中心区别
    • Nacos Server部署
    • Nacos client搭建
    • Nacos 管理界面详细介绍
    • 注册中心配置项详解
    • Nacos集群部署

Alibaba微服务组件Nacos注册中心

1.什么是nacos

注册中心+配置中心+服务管理 平台

注册中心演变过程

管理所有微服务、解决微服务之问调用关系错综复杂、难以维护的问题;

02_Alibaba微服务组件Nacos注册中心_第1张图片

02_Alibaba微服务组件Nacos注册中心_第2张图片

注册中心核心功能

Nacos discovery

服务注册:Nacos Client会通过发送REST请求的方式向Nacos server注册自己的服务,提供自身的元数据,比如ip地址、端口等信息。Nacos Sevet接收到注册请求后,就会把这些元款据信息存储在一个双层的内存Map中。

服务心跳︰在服务注册后,Nacos Client会维护一个定时心跳来持续通知Nacos Server,说明服务一直处于可用状态,防止被剔除。默认5s发送一次心跳

服务同步: Nacos Server集群之间会互相同步服务实例,用来保证服务信息的一致性。leader raft

服务发现: 服务消费者(Nlacos Cient)在调用服务提供者的服务时,会发送一个REST请求给Nacos Sever,获取上面注册的服务清单,并且缓行在Nacos Client本地,同时会在Nacs cient本地开启一个定时任务定时拉取服务端最新的注册表信息更新到本地缓存

服务健康检查: Nacos Server会开启一个定时任务用来检查注册服务实例的狸康情况,对于超过15s没有收到客户诟心跳的实例会将它的ealty属性置为lase(客户端服务发现时不会发现),如果某个实例超过30秒没有收到心跳,直接剔除该实例(被剔除的实例如果恢复发送心跳则会重新注册)

主流的注册中心区别

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

02_Alibaba微服务组件Nacos注册中心_第3张图片

Nacos Server部署

下载地址https://github.com/alibaba/nacos/releases

修改bin\startup.sh改成单机启动(默认集群)

在这里插入图片描述

双击startup.cmd

访问地址nacos首页账号密码都为nacos

Nacos client搭建

复制模块order 和 stock

取名为order-nacos和stock -nacos

父工程添加子模块

<module>order-nacosmodule>
<module>stock-nacosmodule>

order-nacos和stock -nacos

1.引入依赖


<dependency>
    <groupId>com.alibaba.cloudgroupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
dependency>

2.配置文件(order-nacos)

server:
  port: 8020
#应用名称 nacos会将该名称当作服务名称
spring:
  application:
    name: order-service
  cloud:
    nacos:
      server-addr: 127.0.0.1:8848
      discovery:
        username: nacos
        password: nacos
        namespace: public

配置文件(stock -nacos)

server:
  port: 8021

#应用名称 nacos会将该名称当作服务名称
spring:
  application:
    name: stock-service
  cloud:
    nacos:
      server-addr: 127.0.0.1:8848
      discovery:
        username: nacos
        password: nacos
        namespace: public

主启动类 注解@EnableDiscoveryClient 可加可不加

启动 查看nacos发现两个服务列表

(order-nacos)更改controller

String msg = restTemplate.getForObject("http://stock-service/stock/reduct", String.class);

访问 localhost:8020/order/add 报错

(order-nacos)主启动类加上注解@LoadBalanced 默认轮询

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


    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(RestTemplateBuilder builder){
        RestTemplate restTemplate=builder.build();
        return  restTemplate;
    }
}

再次访问localhost:8020/order/add 成功回显

get一个新技能

启动一个完全一样的项目,但端口号不一样

02_Alibaba微服务组件Nacos注册中心_第4张图片

02_Alibaba微服务组件Nacos注册中心_第5张图片

点击apply->ok

stock-nacos控制层改变

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

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

    @RequestMapping("/reduct")
    public String reduct(){
        System.out.println("扣减库存");
        return "扣减库存"+port;
    }
}

重新启动 8020 8021 8022

再次访问localhost:8020/order/add

发现 回显的端口号8021 8022重复跳转(负载均衡的轮询机制 ribbon)

02_Alibaba微服务组件Nacos注册中心_第6张图片

Nacos 管理界面详细介绍

命名空间的概念

namespace: public

pro环境 dev环境 分隔开来

02_Alibaba微服务组件Nacos注册中心_第7张图片

分组的概念和命名空间差不多

雪崩保护-就是保护阈值

0-1之间 百分比

ephemeral: false # 永久实例   默认是true 临时实例
# 哪怕宕机了也不会删除实例

健康实例 — 不健康实例

健康实例数/总实例数 < 保护阈值

1/2 < 0.6 那么就用把挂了的机子先给它用,防止服务雪崩

权重 和负载均衡器有关 越大让别人访问它越多

注册中心配置项详解

spring:
  cloud:
    nacos:
      server-addr: 127.0.0.1:8848
      discovery:
        namespace: public
        
# namespace: public #相同特征的服务进行归类分组管理

# ephemeral: false # 默认=true(临时实例)  ―当服务宕机超过心跳就会将实例剔除掉  #永久实例―哪怕宕机了也不会删除实例当服务宕机永远不会剔除掉

#service: 默认取${spring.application.name},也可以通过该选项配置

#group:默认DEFAULT_GROUP更细的相同特征的服务进行归类分组管理

#weight:通常要结合安装权重的负载均衡策略,权重越高分配的流量就越大

#metadata : version=1可以结合元数据做扩展

Nacos集群部署

linux部署 jdk maven nginx作为负载均衡 mysql

下载 nacos-server-1.4.1.tar.gz

mkdir nacos

# 或者利用wget的方式下载
tar -zxvf  nacos-server-1.4.1.tar.gz  # 解压 
创建3份 ls
[root@localhost nacos]# ls
nacos8849 nacos8850 nacos8851

## 要先装好mysql的环境

[root@localhost nacos]# cd nacos8849/conf/ # 进入配置文件
vim application.properties # 修改一下
server.port=8849
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
db.user.0=root
db.password.0=root

window下拿nacos/conf/nacos-mysql.sql

导入运行

[root@localhost conf]# cp cluster.conf.example cluster.conf

加上下面三行保存退出:
虚拟机ip:8849
虚拟机ip:8850
虚拟机ip:8851
:wq

[root@localhost nacos8849]# cd bin
[root@localhost bin]# vim startup.sh

本来2g改成521m(如果内存很给力就不用了)

在这里插入图片描述

[root@localhost bin]# ./startup.sh  #启动
# 访问测试
复制nacos8849/conf/application.properties文件给其他两个 
复制nacos8849/conf/cluster.conf文件给其他两个 
复制nacos8849/bin/startup.sh文件给其他两个 
#更改一下8850 8851中application.properties中的端口号

启动8850 8851

配置nginx

1.添加言方源仓库
yum install -y yum-utils
yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo

2.安装openresty
yum install -y openresty

cd /usr/local/openresty/
cd nginx


[root@localhost nginx]# vim conf/nginx.conf
    upstream nacoscluster {
        server ${ip}:8849;
        server ${ip}:8850;
        server ${ip}:8851;
    }
    server{
        listen  8847;
        server_name localhost;

        location /nacos/ {
            proxy_pass http://nacoscluster/nacos;
        }
    }
:wq 

[root@localhost nginx]# cd sbin
[root@localhost nginx]#./nginx

ip:8847/nacos/

更改application.yml配置(order-nacos stock-nacos)

server-addr: ip:8847

启动8020 8021 8022

你可能感兴趣的:(微服务,分布式)