Nacos注册中心

news2024/11/27 12:02:45

【Spring Cloud Alibaba】

1. Spring Cloud Alibaba

Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。

依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统。

2.Nacos注册中心

官网:https://nacos.io/zh-cn/

Nacos 致力于发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

在这里插入图片描述

2.1核心概念

1. 服务 (Service)

服务是指一个或一组软件功能(例如特定信息的检索或一组操作的执行),其目的是不同的客户端可以为不同的目的重用(例如通过跨进程的网络调用)。Nacos 支持主流的服务生态,如 Kubernetes Service、gRPC|Dubbo RPC Service 或者 Spring Cloud RESTful Service.

2. 服务注册中心 (Service Registry)

服务注册中心,它是服务实例及元数据的数据库。服务实例在启动时注册到服务注册表,并在关闭时注销。服务和路由器的客户端查询服务注册表以查找服务的可用实例。服务注册中心可能会调用服务实例的健康检查 API 来验证它是否能够处理请求。

3. 服务元数据 (Service Metadata)

服务元数据是指包括服务端点(endpoints)、服务标签、服务版本号、服务实例权重、路由规则、安全策略等描述服务的数据

4. 服务提供方 (Service Provider)

是指提供可复用和可调用服务的应用方

5. 服务消费方 (Service Consumer)

是指会发起对某个服务调用的应用方

6. 配置 (Configuration)—配置文件中心

在系统开发过程中通常会将一些需要变更的参数、变量等从代码中分离出来独立管理,以独立的配置文件的形式存在。目的是让静态的系统工件或者交付物(如 WAR,JAR 包等)更好地和实际的物理运行环境进行适配。配置管理一般包含在系统部署的过程中,由系统管理员或者运维人员完成这个步骤。配置变更是调整系统运行时的行为的有效手段之一。

7. 配置管理 (Configuration Management)

在数据中心中,系统中所有配置的编辑、存储、分发、变更管理、历史版本管理、变更审计等所有与配置相关的活动统称为配置管理。

8. 名字服务 (Naming Service)

提供分布式系统中所有对象(Object)、实体(Entity)的“名字”到关联的元数据之间的映射管理服务,例如 ServiceName -> Endpoints Info, DNS Domain Name -> IP List, 服务发现和 DNS 就是名字服务的2大场景。

9. 配置服务 (Configuration Service)

在服务或者应用运行过程中,提供动态配置或者元数据以及配置管理的服务提供者。

2.2 nacosServer的安装和启动

NacosServer相当于EurekaServer,只不过eurekaServer使我们自己搭建的一个项目,而NacosServer别人已经提供好了

1. NacosServer的下载

我们要对应版本,目前alibaba稳定版是2021.0.1.0对应的nacos版本为1.4.2

地址: https://github.com/alibaba/nacos/releases/tag/1.4.2

2.目录信息

bin:可执行文件夹目录,包含:启动、停止命令等等

conf:配置文件目录

target:存放naocs-server.jar

LICENSE:授权信息,Nacos使用 Apache License Version 2.0授权

NOTICE:公告信息

3.修改配置文件

进入${Nacos}/conf目录里面,使用文件编辑器打开application.properties文件

spring.datasource.platform=mysql
### Count of DB:
db.num=1
### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=123456

Nacos 默认使用嵌入式数据库实现数据的存储,并不方便观察数据存储的基本情况,这里面我们修改为使用Mysql数据库做数据的存储,方便我们观察数据的结构。原本的配置都是注释的,取消注释。

注意:上面的url地址是实际的服务器地址,用户名和密码都是实际的mysql数据库密码

4. Mysql表的导入

在config目录下找到对应的sql脚本-nacos-mysql,创建数据库nacos,运行sql脚本

提示:Nacos 建议使用5.7的Mysql 数据库,版本较低或者较高可能存储兼容性问题。

5.修改启动模式

进入到${Nacos}/bin 目录里面:打开startup.cmd文件,修改启动模式

将set MODE=”cluster”修改为standalone

set mode="standalone" #默认为cluster

6.启动服务器

执行startup.cmd,出现启动画面

http://localhost:8848/nacos ,即可访问启动Nacos 实例,默认用户名密码都是nacos

2.3搭建项目

分别搭建consumer 和provider两个项目,作为提供者和消费者。

1.创建项目

 <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.6.8</spring-boot.version>
        <spring-cloud-alibaba.version>2021.0.1.0</spring-cloud-alibaba.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</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>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <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>
        </dependencies>
    </dependencyManagement>

2.配置 application.yml

注意提供者端口为8001,则消费者端口设置为8002

server:
    port: 8001
spring:
    application:
        name: consumer
    cloud:
        nacos:  # 客户端注册的地址
            server-addr: localhost:8848
            username: nacos
            password: nacos
#           discovery: # 命名空间 可以做项目隔离
#                namespace: car-namespace
#                group: dev # 在命名空间下的组别,可以用来做细粒度的隔离

3.开启注册发现

@SpringBootApplication
@EnableDiscoveryClient  //开启服务发现客户端 也就是nacosServer的客户端
public class AlibabaNacosConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(AlibabaNacosConsumerApplication.class, args);
    }
}

4.提供者添加ProviderController


@RestController
public class ProviderController {
    @GetMapping("hello")
    public String hello(String name) {
        return "hello:"+name;
    }
}

启动查看nacos中的服务列表,是否正常注册。

5.消费者添加ConsumerController

@RestController
public class ConsumerController {
    @Autowired
    private DiscoveryClient discoveryClient;
    @GetMapping("/discovery")
    public String consumer()
    {
       List<ServiceInstance> list= discoveryClient.getInstances("provider");
       ServiceInstance instance=list.get(0);
       String result="服务:"+instance.getInstanceId()+",主机:"+instance.getHost()+",服务URL:" + instance.getUri()+",端口"+instance.getPort();
       return result;
    }
}

至此,服务注册和服务发现已经完成了,基本和eureka一样,注意,只能发现在同一个命名空间下和同一个组别下面才可以发现.

6.集成openfeign做远程调用和负载均衡

修改consumer的内容,添加open-feign组件,注意springcloud的版本

  <properties>       
       <spring-boot.version>2.6.8</spring-boot.version>
        <spring-cloud.version>2021.0.1</spring-cloud.version>
        <spring-cloud-alibaba.version>2021.0.1.0</spring-cloud-alibaba.version>
    </properties>

    <dependencies>
       <!--open组件-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <!-- 因为nacos没有集成lb 所以得添加这个依赖 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
        </dependency>      
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <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>
        </dependencies>
    </dependencyManagement>

7.修改启动类,添加注解

@EnableFeignClients   //开启feign的客户端

8.添加Hello的Feign接口

@FeignClient(value = "provider")
public interface ProviderFeign {   
    @GetMapping("hello")
    String hello(@RequestParam("name") String name);
}

9.添加多一个提供者项目provider2

测试负载均衡和feign远程调用的结果

2.4 Nacos Discovery对外暴露Endpoint

Nacos Discovery 内部提供了一个 Endpoint, 对应的 endpoint id 为 nacos-discovery。我们通过该Endpoint,能获取到:

当前服务有哪些服务订阅者 ;

当前应用 Nacos 的基础配置信息 ;

1. 给任意项目添加依赖

假设我们想看消费者的一些信息,我们给消费者添加

<dependency>  
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId> 
</dependency>

2 修改配置文件

Endpoint本身对外界隐藏显示,我们需要在配置里面开启对Endponit的显示支持。

修改application.yml配置文件,在里面添加如下的配置:

management:
  endpoints:
    web:
      exposure:
        include: '*'

说明:

exposure.include:对外界保留那些Endpoint,若是所有则使用* ;

3. 启动项目访问查看效果

http://localhost:8001/actuator

http://localhost:8001/actuator/nacosdiscovery

2.5 Nacos Discovery Starter更多的配置项

配置项默认值Key配置说明
服务端地址spring.cloud.nacos.discovery.server-addrNacos Server 启动监听的ip地址和端口
服务名${spring.application.name}spring.cloud.nacos.discovery.service给当前的服务命名
服务分组DEFAULT_GROUPspring.cloud.nacos.discovery.group设置服务所处的分组
权重1spring.cloud.nacos.discovery.weight取值范围 1 到 100,数值越大,权重越大
网卡名spring.cloud.nacos.discovery.network-interface当IP未配置时,注册的IP为此网卡所对应的IP地址,如果此项也未配置,则默认取第一块网卡的地址
注册的IP地址spring.cloud.nacos.discovery.ip优先级最高
注册的端口-1spring.cloud.nacos.discovery.port默认情况下不用配置,会自动探测
命名空间spring.cloud.nacos.discovery.namespace常用场景之一是不同环境的注册的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。
AccessKeyspring.cloud.nacos.discovery.access-key当要上阿里云时,阿里云上面的一个云账号名
SecretKeyspring.cloud.nacos.discovery.secret-key当要上阿里云时,阿里云上面的一个云账号密码
Metadataspring.cloud.nacos.discovery.metadata使用Map格式配置,用户可以根据自己的需要自定义一些和服务相关的元数据信息
日志文件名spring.cloud.nacos.discovery.log-name
集群DEFAULTspring.cloud.nacos.discovery.cluster-name配置成Nacos集群名称
接入点UTF-8spring.cloud.nacos.discovery.enpoint地域的某个服务的入口域名,通过此域名可以动态地拿到服务端地址
是否集成Ribbontrueribbon.nacos.enabled一般都设置成true即可
是否开启Nacos Watchtruespring.cloud.nacos.discovery.watch.enabled可以设置成false来关闭 watch

os.discovery.enpoint | 地域的某个服务的入口域名,通过此域名可以动态地拿到服务端地址 |
| 是否集成Ribbon | true | ribbon.nacos.enabled | 一般都设置成true即可 |
| 是否开启Nacos Watch | true | spring.cloud.nacos.discovery.watch.enabled | 可以设置成false来关闭 watch |

.00.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/115089.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微信小程序开发—入门到跑路(五)

文章目录1. 今日目标2. 使用 npm2.1 小程序对 npm 的支持和限制问题2.2 了解什么是 vant Weapp2.3 安装 Vant 组件库问题2.4 使用 Vant 组件问题2.5 定义和使用 CSS 变量问题2.6 使用 CSS 变量定制 Vant 的主题样式问题2.7 什么是小程序 API 的 Promise 化2.8 安装并构建 minip…

运输层协议概述(计算机网络-运输层)

目录 运输层协议的位置 运输层为相互通信的应用进程提供了逻辑通信 应用进程之间的通信 客户-服务器通信模式 互联网的运输层协议 UDP 与 TCP 运输层的复用与分用 运输层端口的概念 端口在进程之间的通信中所起的作用 端口号 运输层协议的位置 从通信和信息处理的角度…

2022年终总结(脚踏实地,仰望星空)

2022年终总结 回忆录 2022年焦虑和快乐是这一年中最大的两种情绪了。焦虑主要是因为心里的三块石头&#xff0c;从年初就开始悬着。第一块石头&#xff0c;科研论文录用&#xff0c;第二个石头&#xff0c;拿到国奖&#xff0c;第三个石头是拿到满意的offer。目前只剩下最后一…

网络实验之EtherChannel技术实践

一、EtherChannel简介 EtherChannel简单来说就是将多个物理端口绑定为一个逻辑端口&#xff0c;通过多个端口绑定&#xff0c;能充分利用现有端口来增加带宽。构成etherchannel的端口必须配置成相同的特性&#xff0c;如双工模式、速度、同为FE或GE端口、native VLAN,、VLAN ra…

C++11标准模板(STL)- 算法(std::inner_product)

定义于头文件 <algorithm> 算法库提供大量用途的函数&#xff08;例如查找、排序、计数、操作&#xff09;&#xff0c;它们在元素范围上操作。注意范围定义为 [first, last) &#xff0c;其中 last 指代要查询或修改的最后元素的后一个元素。 计算两个范围的元素的内积…

十七、Docker Compose容器编排第二篇

在上一篇中我们讲解了容器编排是什么、能干什么、怎么安装、使用步骤&#xff0c;如果没有看的大家可以先看下&#xff1a;https://blog.csdn.net/u011837804/article/details/128335166&#xff0c;然后继续看这一篇&#xff0c;好了&#xff0c;我们继续。 1、Docker Compons…

gl-Camera

我的服务原文访问&#xff1a;Camera 1.创建摄像机的坐标系&#xff0c;&#xff08;创建原理&#xff0c;两条直线求其法向量&#xff09; Z轴:在世界坐标中指向摄像机的向量&#xff08;D&#xff09; X轴&#xff1a;随便找一个向上量和Z向量求出的法向量就是X轴&#xf…

PostgreSQL数据库TableAM——Table scan callbacks

TableAM Table scan TableAM提供了如下4个接口用于实现表数据的扫描功能。scan_begin函数的形参nkeys不为零&#xff0c;则扫描结果需要根据scan keys先进行过滤&#xff1b;pscan如果不为null&#xff0c;说明该结构体已经由parallelscan_initialize初始化过了(仅仅在table_b…

初识Docker:(5)Docker自定义镜像

初识Docker&#xff1a;&#xff08;5&#xff09;Docker自定义镜像镜像结构Dockerfile语法什么是Dockerfile构建Java项目案例1&#xff1a;基于ubuntu镜像构建一个新镜像&#xff0c;运行一个java项目案例2&#xff1a;基于java:8-alpine镜像&#xff0c;将一个java项目构建为…

Java+JSP机房课表管理系统(含源码+论文+答辩PPT等)

项目功能简介: 该项目采用技术CSSJavaScriptMySQLServlet、MySQL数据库、项目含有源码、配套开发软件、软件安装教程、项目发布教程等 项目功能介绍&#xff1a; 系统管理&#xff1a;包含用户的注册&#xff0c;管理&#xff0c;信息修改 课程管理&#xff1a;包含课程录入、维…

IT大侦“碳”:VxRail的可持续法宝

环境Environmental      社会责任Social Responsibility      企业治理Corporate Governance      随着碳达峰、碳中和的逐步推进,越来越多的“大厂”或各行业的明星企业都开始重视自己的ESG报告,已然成为了商界新风尚。      可持续发展战略也与前沿技术密切相…

matlab神经网络求解最优化,matlab神经网络训练数据

1、神经网络的准确率是怎么计算的&#xff1f; 其实神经网络的准确率的标准是自己定义的。 我把你的例子赋予某种意义讲解&#xff1a; 1&#xff0c;期望输出[1 0 0 1]&#xff0c;每个元素代表一个属性是否存在。像着4个元素分别表示&#xff1a;是否肺炎&#xff0c;是否肝…

哈希知识点

目录对比map/set1. unordered系列关联式容器1.1 unordered_map2. 底层结构2.1 哈希概念2.2 哈希冲突2.3 哈希函数2.4 哈希冲突解决2.4.1 闭散列线性探测和二次探测扩容&#xff08;负载因子&#xff09;闭散列实现的hash2.4.2 开散列概念开散列思考实现模拟实现模板参数列表的改…

Java项目:springboot农业物资管理系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 农业物资管理系统&#xff0c;管理员可以对角色进行配置&#xff0c;分配用户角色&#xff1b; 主要功能包含&#xff1a;登录、注册、修改密码…

并查集解决重复员工问题

简介 工作一年多了&#xff0c;天天CRUD&#xff0c;终于以前学习的算法排上用场了。 背景 我们的系统在用户注册时没有校验身份id&#xff08;身份证&#xff09;和电话号码的唯一&#xff0c;可能使用相同的身份id或者电话号码创建多个账号&#xff0c;导致有些人开多个账…

面试者推荐 |【Redis面试专题】「常见问答系列」透析Redis常见技术相关的问题1~10题(进阶)

&#x1f4da; 前提回顾 首先如果没有阅读【面试者推荐 |【Redis面试专题】「常见问答系列」透析Redis常见技术相关的问题1~10题&#xff08;基础&#xff09; 】&#xff0c;简易先去看看基础10题&#xff0c;因为循序渐进才是正道&#xff0c;哈哈。 &#x1f4da; 1. Redis…

WebRTC源码之RTCPReceiver源码分析

WebRTC源码之RTCPReceiver源码分析 WebRTC源码之RTCPReceiver源码分析WebRTC源码之RTCPReceiver源码分析前言一、 RTCP接受数据的流程的堆栈信息的1、网络io 线程读取数据2、 线程切换的代码3、 线程切换 gcc二、 RTCPReceiver::IncomingPacket方法读取RTCP数据的格式1、 Parse…

【PyTorch深度学习项目实战100例】—— 基于DPCNN实现电商情感分析任务 | 第79例

前言 大家好,我是阿光。 本专栏整理了《PyTorch深度学习项目实战100例》,内包含了各种不同的深度学习项目,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集。 正在更新中~ ✨ 🚨 我的项目环境: 平台:Windows10语言环境:python3.7编译器:PyCharmPy…

随机种子 3407 is all you need

文 | 天于刀刀你最常用的随机种子是哪个&#xff1f;在刀刀的团队里&#xff0c;关于随机种子的设置主要分化为两派~玄学派&#xff0c;可能设置为自己的纪念日&#xff0c;又或者是星座预测中的本月幸运数字&#xff1b;以及&#xff0c;自然派&#xff0c;随机种子是啥其实无…

Java项目:springboot健身房管理系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目为后台管理系统&#xff1b; 主要功能如下&#xff1a; 管理员登录模块 会员管理模块 教练管理模块 课程管理模块 器材管理模块 物品遗失…