首页 > 其他分享 >注册中心Nacos

注册中心Nacos

时间:2023-09-03 19:13:05浏览次数:40  
标签:服务 中心 Spring Nacos nacos 集群 注册 public

一、SpringCloud简介

1、SpringCloud是什么

  • Spring Cloud是一系列框架的有序集合,这些框架为我们提供了分布式系统构建工具。

2、SpringCloud包含那些项目

项目 项目名称
服务注册于发现 Alibaba Nacos、Netflix Eureka、Apache Zookper
分布式配置中心 Alibaba Nacos、Spring Cloud Config
网关 Spring Cloud Gateway、Netflix Zull
限流熔断器 Alibaba Sentinel、Netflix Hystrix、 Resilience4j
服务调用 RestTemplate、Open Feign、Dubbo Spring Cloud
负载均衡 Spring Cloud LoadBalancer、Netflix Ribbon
消息总线 Spring Cloud Bus
... ....

3、SpringCloud版本选择

https://github.com/alibaba/spring-cloud-alibaba/wiki/版本说明

Spring Cloud Alibaba Version Spring Cloud Version Spring Boot Version
2.1.4.RELEASE Spring Cloud Greenwich.SR6 2.1.13.RELEASE
Spring Cloud Alibaba Version Sentinel Version Nacos Version Seata Version
2.1.4.RELEASE 1.8.0 1.4.1 1.3.0

二、Nacos安装以及编译

1、下载源码

GitHub地址:https://github.com/alibaba/nacos/tree/1.4.1

解压进入目录中进行maven编译

mvn clean install -DskipTests -Drat.skip=true -f pom.xml

image.png

注意:编译的时候可能需要你自己指定jdk版本,可以修改maven配置文件conf/settings.xml

image.png

<profile>  
<id>jdk-1.8</id>  
<activation>  
   <activeByDefault>true</activeByDefault>  
   <jdk>1.8</jdk>  
</activation>  
<properties>  
   <maven.compiler.source>1.8</maven.compiler.source>  
   <maven.compiler.target>1.8</maven.compiler.target>  
   <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>  
</properties>  
</profile> 

2、源码单机启动

  • 将jdk版本都设置为jdk8
  • 设置参数
 -Dnacos.standalone=true

3、单机启动服务

5、修改startup.cmd

将MODE模式改为standalone,这样下次直接双击startup.cmd就可以了

image.png

三、Nacos服务领域模型

image.png

service->cluster-> instanc【之所以他会这样设置就是为了大的互联网公司,多集群垮机房提供了解决方案。但我们小公司一般都不需要这样。】

Namespace:实现环境隔离,默认值public

Group:不同的service可以组成一个Group,默认值Default-Group

Service:服务名称
Cluster:对指定的微服务虚拟划分,默认值Default

Instance:某个服务的具体实例

Nacos服务注册中心于发现的领域模型的最佳实践。

image.png

NameSpace: 是我们生产,开发和测试环境的隔离。测试访问测试,生产访问生产。

Group:比如说有一类服务。他们都是为了交易而服务的。比方说我们的订单,比方说我们的支付。这个在服务注册中心的场景中并不常用。

Service:下一个层级就是service,同一个group有多个service,再服务下面就是集群的概念:

Cluster:比方我们可以有北京的集群也可以有上海的集群。那这个集群的概念意义是什么? 我们可以设想这样的一个场景,比方阿里只在杭州部署一个淘宝的集群,那我们北方的人民去访问,是不是就会相对较慢,一般都会再南方和北方都设置两个集群。当北方人民访问的时候一般我们都访问北京这个集群的服务,其他的服务都会在北京的集群里面互相调用,而不会垮cluster进行访问,这样在同一个数据中心访问都是比较快的。这就是他的意义。

Instance: 这个就是实例,并且是多实例的,这样防止单点问题,从而实现高可用,当北京集群坏了,他会可以访问上海的集群。当一个实例挂掉,另一个实例会替代,当一个集群挂掉,另一个集群会替代上。这样就保证了高可用。很多公司宣传5个9或者4个9的可用,那么全年停机的时长不会超过固定的时长。

四、Nacos的使用

1、 正常使用http客户端调用

我们下订单的时候的调用:

image.png

1、讲解单独调用的图
2、然后运行一下这个demo
3、提出问题
4、进行改造

image.png

2、引入nacos

改造msb-stock

1、父pom引入依赖

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

2、启动注解

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

3、增加配置

spring:
  cloud:
    nacos:
      discovery:
        service: msb-stock
        server-addr: localhost:8848

改造msb-order

2、启动注解:

@EnableDiscoveryClient
@SpringBootApplication
public class OrderApplication {

    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

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

3、增加配置

spring:
  cloud:
    nacos:
      discovery:
        service: msb-order
        server-addr: localhost:8848

4、改造代码:

  @GetMapping("/order/create")
    public String createOrder(Integer productId,Integer userId){
        String result = restTemplate.getForObject("http://msb-stock/stock/reduce//" + productId, String.class);
        return "下单成功";
    }

5、现在我们访问msb-stock ,但是restTemplate并不知道怎样调用

@GetMapping("/order/create")
public String createOrder(Integer productId,Integer userId){
    // 此时restTemplate并不能识别msb-stock所以他不能进行调用
    // RestTempLate调用需要一个负载均衡器 1、 获取msb-stock对应服务列表 2、选择一个去调用
    // RestTemplate扩展点clientHttpRequestInterceptor
    // 我们有个组件ribbon 实现了这个扩展点 LoadBalancerInterceptor
	// 他做的事情就是将msb-stock:替换为:localhost:11001
    String result = restTemplate.getForObject("http://msb-stock/stock/reduce//" + productId, String.class);
    return "下单成功";
}

分析一下LoadBalancerInterceptor的拦截器Interceptor

image.png

我们可以进行如下改造:

@Autowired
LoadBalancerClient loadBalancerClient;

@Bean
public RestTemplate restTemplate(){
    RestTemplate restTemplate = new RestTemplate();
    restTemplate.setInterceptors(Collections.singletonList(new LoadBalancerInterceptor(loadBalancerClient)));
    return restTemplate;
}

当然我们也可以进行如下改造:直接加入注解@LoadBalance后面我们会讲

@LoadBalanced
@Bean
public RestTemplate restTemplate(){
    return new RestTemplate();
}

五、Nacos注册中心的原理

image.png

首先服务在启动的时候会将数据注册到注册中心,这样就服务只要启动就可以对外提供服务了, 那么同时他也要维持一个心跳,心跳的意义就是某个服务挂掉,我肯定让注册中心知道,如果服务挂了还没有告诉注册中心,那么注册中心会引导客户端调用挂掉的服务体验就不好了,所以注册中心重要的概念就是和我们的服务维持一个心跳,来实时的监听我们服务的状态,当服务挂掉就会将其从服务列表中踢掉,接下来肯定还有服务的调用者,他在调用服务之前一定会到注册中心拉取服务列表,获取可用的服务,并且还有一个定时任务来定时拉取服务列表,以保持服务列表的最新状态,其次还有更新的功能,这个功能就是当服务挂掉的时候通过心跳他会发现这服务不健康了,他会更新本地的服务注册表,同时将所有订阅这个注册表的服务进行更新。

六、集群搭建

1、解压Nacos

解压Nacos,复制三份

image.png

2、配置数据库

具体位置在nacos目录下的conf中,这里的操作和之前是一样的,我们可以直接打开这个文件然后拷贝到数据库中执行,当然也是要创建数据库使用数据库然后在复制脚本内容,执行即可。

create database nacos_config;
use nacos_config;

image.png

3、修改application.properties配置文件

修改每个服务数据库链接

spring.datasource.platform=mysql

db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&serverTimezone=UTC
db.user=root
db.password=123456

修改每个服务端口

server.port=8848

4、修改集群配置文件

将cluster.conf.example 改为 cluster.conf,并添加对应服务集群Ip:port,

其他文件夹也要修改

image.png

5、集群启动

D:\toolsDev\springalibaba\nacos cluster\nacos-8848\bin\startup.cmd -m cluster
D:\toolsDev\springalibaba\nacos cluster\nacos-8868\bin\startup.cmd -m cluster
D:\toolsDev\springalibaba\nacos cluster\nacos-8888\bin\startup.cmd -m cluster

6、浏览器访问一下Nacos

7、安装Nginx

修改nginx.conf

worker_processes  1;

events {
    worker_connections  1024;
}

stream {
      upstream nacos {
        server 192.168.1.11:8848;
        server 192.168.1.11:8868;
        server 192.168.1.11:8888;
      }


     server {
        listen  81;
        proxy_pass nacos;
     }
}

启动nginx

start nginx.exe

重新加载

nginx.exe -s reload

8、进行访问

http://localhost:8848/nacos

9、项目链接

image.png

标签:服务,中心,Spring,Nacos,nacos,集群,注册,public
From: https://www.cnblogs.com/zhangyibing/p/17675371.html

相关文章

  • Apollo配置中心介绍
    1、WhatisApollo2、WhyApollo3、Apolloataglance4、Apolloindepth5、ContributetoApollo1、WhatisApollo1.1背景随着程序功能的日益复杂,程序的配置日益增多:各种功能的开关、参数的配置、服务器的地址……对程序配置的期望值也越来越高:配置修改后实时生效,灰度发布,分环......
  • javaweb中servlet的使用案例,登录、注册
    2023-09-03注册packagecom.hh.web;/***@authorhh*@version1.0*@DATE2023-09-0314:56:28*/importcom.hh.mapper.UserMapper;importcom.hh.pojo.User;importcom.hh.util.SqlSessionFactoryUtil;importorg.apache.ibatis.io.Resources;importorg.a......
  • Apollo分布式配置中心
    ......
  • Go语言 Http库 注册激活用户 实践
    背景需要在公司的平台上面,批量给用户注册,并激活账号信息。主要是通过console接口进行激活和注册,所以要使用到Go语言的http库,在此记录。步骤分解console页面注册获取注册和激活接口需要的信息。通过postman验证接口。关闭服务IP注册限制(公司代码相关)。通过代码进行注册激活。恢......
  • ThingsKit物联网平台告警中心之告警联系人
    告警联系人是指接收告警信息的人,产生告警后,会第一时间通知他。新增点击新增告警联系人按钮,填入相关信息,确认新增。告警联系人参数参数说明联系人姓名定义告警通知到的联系人名称必填支持输入的格式:中英文、字符、数字支持输入的长度限制:30个字符||所属组......
  • ThingsKit物联网平台告警中心之告警记录
    概述当设备达到预先指定的阈值时,平台会自动产生告警,可以通过告警记录及时查看详细的告警信息以及对告警进行处理和反馈。详情场景联动中设备产生的告警记录详情。:::info......
  • ThingsKit物联网平台告警中心之告警配置
    告警配置是指对告警联系人,告警通知方式进行配置。新增点击新增告警配置,填入相关信息和告警联系人。告警配置参数参数说明告警配置名称定义告警配置名称必填支持输入的格式:中英文、字符、数字支持输入的长度限制:30个字符||所属组织|选择组织来选择告警......
  • ​​​windows上传ipa到开发者中心(app store)的方法​​
    假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开发者中心才能在构建版本里选择构建版本上架。那么我们怎么将ipa上传上去构建版本呢?我们需要借助第三方的工具。苹果为我们提供了xco......
  • 利用中心极限定理求解圣彼得堡悖论问题的近似曲线
    此文为《概率论》课程小项目。关于圣彼得堡悖论的一些思考记\(N\)为游戏的轮数,则\(N\simGe(\frac{1}{2}),P(N=k)=2^{-k},k=1,2,3,...\)奖金\(X=2^N\),\(E(X)=E(2^N)=\sum_{k=1}^{+\infty}2^k\times2^{-k}=\sum_{k=1}^{+\infty}1=+\infty\)理论上如果能玩无限轮游戏......
  • android短视频开发,js如何设置canvas绕图形中心旋转
    android短视频开发,js如何设置canvas绕图形中心旋转1.准备一个页面拟写一个页面,用于实验,代码如下 <!DOCTYPEhtml><html><head><metacharset="utf-8"><metaname="viewport"content="width=device-width,initcal-scale=1.0"/><title>......