03-Nacos微服务注册中心--快速入门

news2024/10/5 15:38:10

一、简介

Nacos(Naming Configuration Service) 是一个易于使用的动态服务发现、配置和服务管理平台,用于构建云原生应用程序

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

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

1.1 什么是Nacos

  1. Nacos = 注册中心+配置中心组合

  2. Nacos支持几乎所有主流类型的“服务”的发现、配置和管理,常见的服务如下:

    Kubernetes Service

    gRPC & Dubbo RPC Service

    Spring Cloud RESTful Servic

二、下载安装

官网地址:https://nacos.io/zh-cn/index.html
官方文档地址:https://nacos.io/zh-cn/docs/quick-start.html

注意使用官网推荐的地址

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

我们以Windos版本为案例

2.1 启动脚本命令

1.Linux/Unix/Mac
启动命令(standalone代表着单机模式运行,非集群模式):

sh startup.sh -m standalone

2.Windows
启动命令(standalone代表着单机模式运行,非集群模式):

startup.cmd -m standalone

3.测试验证结果
image.png

4.出现此界面表示已经成功启动Nacos,默认的账号密码是:nacos/nacos
image.png

2.2 启动遇到的问题

Please set the JAVA_HOME variable in your environment, We need java(x64)! jdk8 or later is better!

大概意思找不到JAVA_HOME 环境变量,正常情况我们做开发的肯定本地都有配置JDK,首先看下版本是不是jdk8版本。如果本地都有环境变量,版本也一致,修改启动脚本startup.cmd

修改文件的第14行增加set JAVA_HOME=“D:\soft\Java\jdk1.8.0_281”。自己的路径

三、快速入门

官方文档地址:https://spring.io/projects/spring-cloud-alibaba#learn

3.1 创建父项目

本案例采用maven的聚合项目

image.png

引入依赖
image.png

3.2 创建子项目

image.png

引入依赖

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

在我们的启动类上面增加相关注解

@EnableDiscoveryClient

修改配置文件

server:  
  port: 9001  
spring:  
  application:  
    name: nacos-payment-provider  
    cloud:  
      nacos:  
        discovery:  
          server-addr: localhost:8848  
management:  
    endpoints:  
        web:  
        exposure:  
            include: '*'

启动测试查看子项目是否注册到Nacosz服务上。
注意:保证我们的Nacos服务正常启动

image.png

子项目已经注册进去了

3.2 Ribbon负载均衡

3.2.1 什么是Ribbon

它是一个基于HTTP和TCP客户端负载均衡器。它虽然只是一个工具类库,它却是每一个微服务的基础设施。因为实际上,对于服务间调用、API网关请求转发都需要经过Ribbon负载均衡来实现。总体来说,Ribbon的主要作用是:从注册服务器端拿到对应服务列表后以负载均衡的方式访问对应服务

要注意的是Nacos已经整合了Ribbon,所以我们想要使用只需要导入Spring Cloud Alibaba Nacos的依赖就可以直接使用了
image.png

3.2.2 搭建cloud-nacos-consumer-9003

我们按照上一步,复制9001项目,修改配置文件端口为9002。启动后我们发现Nacos会有两个注册实例。然后我们搭建消费者服务去调用9001和9002的接口。以此来实现软件层面的负载均衡效果。

image.png

注意父项目的pom文件需要增加modules模块

<modules>
    <module>cloudalibaba-nacos-9001</module>
    <module>cloudalibaba-nacos-9002</module>
    <module>cloudalibaba-consumer-nacos-8083</module>
</modules>

启动类增加相关注解

@EnableDiscoveryClient

RestTemplate 需要交给Spring管理
必须要加@LoadBalanced注解

什么是@LoadBalanced注解,@LoadBalanced注解的使用?

@LoadBalanced是Spring Cloud中提供的一个注解,它用于将一个RestTemplate对象标记为支持负载均衡的,从而可以针对服务名称进行REST调用。

在Spring Cloud中,当通过服务名称进行REST调用时,RestTemplate对象会使用负载均衡算法来选择目标服务的实例。@LoadBalanced注解用于为RestTemplate对象增加这个支持负载均衡的特性,从而实现在服务调用时进行负载均衡,而不是简单的IP地址访问。

@SpringBootApplication  
@EnableDiscoveryClient  
public class ColudNacosConsumerApplication {  
  
    public static void main(String[] args) {  
        SpringApplication.run(ColudNacosConsumerApplication.class, args);  
    }  
  
    @Bean  
    @LoadBalanced    
    public RestTemplate restTemplate(){  
        return new RestTemplate();  
    }  
}

3.2.3 查看Nacos注册中心

说明9001,9002,9003已经成功注册进去。

image.png

3.2.4 如何使用Ribbon的RestTemplate

需要远程访问那么可以使用RestTemplate,其中getForObject是最常用方法,同时还要在服务消费者中配置RestTemplate

@Resource  
private RestTemplate restTemplate;  
  
@GetMapping("/nacos-consumer")  
public String demo(){  
 return restTemplate.getForObject("http://nacos-payment-provider/demo",String.class);  
}
  • 第一个参数url表示被调用的目标Rest接口位置
    1. url的第一部分是在Nacos中注册的服务提供者名称,如果多个服务提供者注册相同名称,Ribbon会自动寻找其中一个服务提供者,并且调用接口方法。这个就是负载均衡功能。
	2. url后半部是控制器的请求路径
  • 第二个参数是返回值类型
JavaBean类型或者JavaBean数组类型,如果控制器返回的是List集合,需要使用数组类型接收。
  • 第三个参数是可变参数
是传递给url的动态参数,使用参数时候需要在url上需要使用{1}、{2}、{3}进行参数占位,这样传递的参数就会自动替换占位符

3.2.5 验证负载均衡的效果

如果我们想要让服务消费者consumer-nacos-9003调用服务提供者nacos-9001或者9002,那么必然要使用负载均衡Ribbon和远程调用RestTemplate,所以我们要做的第一件事情就是先让9001或者9002服务对外提供接口,用于访问。

  • 9001对外提供接口
@RestController  
public class DemoController {  
  
    @GetMapping("/demo")  
    public String demo(){  
        return "我是服务提供者端口为9001的demo方法";  
    }  
}
  • 9002对外提供接口
@RestController  
public class DemoController {  
  
    @GetMapping("/demo")  
    public String demo(){  
        return "我是服务提供者端口为9002的demo方法";  
    }  
}
  • 这时候我们需要9003服务消费去发起对9001,9002接口调用

我这里的nacos-payment-provider硬编码了,可以放在配置文件中,具体调用那个服务名称

@Resource  
private RestTemplate restTemplate;  
  
@GetMapping("/nacos-consumer")  
public String demo(){  
    return restTemplate.getForObject("http://nacos-payment-provider/demo",String.class);  
}

image.png
看到浏览器输出的内容会随机打印端口,代表了负载均衡,默认轮询。

四、Nacos服务注册中心对比

服务注册与发现框架CAP模型控制台管理社区活跃度
EurekaAP支持低(2.x版本闭源)
ZookeeperCP不支持
ConsulCP支持
NacosAP/CP支持

4.1 CAP模型

详细概念可以百度查查。。。。

计算机专家 埃里克·布鲁尔(Eric Brewer)于 2000 年在 ACM 分布式计算机原理专题讨论会(简称:PODC)中提出的分布式系统设计要考虑的三个核心要素:

  • 一致性(Consistency):同一时刻的同一请求的实例返回的结果相同,所有的数据要求具有强一致性(Strong Consistency)
  • 可用性(Availability):所有实例的读写请求在一定时间内可以得到正确的响应
  • 分区容错性(Partition tolerance):在网络异常(光缆断裂、设备故障、宕机)的情况下,系统仍能提供正常的服务

以上三个特点就是CAP原则(又称CAP定理),但是三个特性不可能同时满足,所以分布式系统设计要考虑的是在满足P(分区容错性)的前提下选择C(一致性)还是A(可用性),即:CP或AP

4.2 CP原则:一致性 + 分区容错性原则

CP 原则属于强一致性原则,要求所有节点可以查询的数据随时都要保持一直(同步中的数据不可查询),即:若干个节点形成一个逻辑的共享区域,某一个节点更新的数据都会立即同步到其他数据节点之中,当数据同步完成后才能返回成功的结果,但是在实际的运行过程中网络故障在所难免,如果此时若干个服务节点之间无法通讯时就会出现错误,从而牺牲了以可用性原则(A),例如关系型数据库中的事务。

4.3 AP原则:可用性原则 + 分区容错性原则

AP原则属于弱一致性原则,在集群中只要有存活的节点那么所发送来的所有请求都可以得到正确的响应,在进行数据同步处理操作中即便某些节点没有成功的实现数据同步也返回成功,这样就牺牲一致性原则(C 原则)。

使用场景:对于数据的同步一定会发出指令,但是最终的节点是否真的实现了同步,并不保证,可是却可以及时的得到数据更新成功的响应,可以应用在网络环境不是很好的场景中。

4.4 Nacos支持CP和AP

Nacos无缝支持一些主流的开源生态,同时再阿里进行Nacos设计的时候重复的考虑到了市场化的运作(市面上大多都是以单一的实现形式为主,例如:Zookeeper使用的是 CP、而 Eureka采用的是AP),在Nacos中提供了两种模式的动态切换。
image.png

4.3.1 Nacos如何选择切换模式

  1. 一般来说,如果不需要储存服务界别的信息且服务实例通过nacos-client注册,并能够保持心跳上报,那么就可以选择AP模式。如Spring Cloud 和 Dubbo,都适用于AP模式,AP模式为了服务的可用性减弱了一致性,因此AP模式下只支持注册临时实例。
  2. 如果需要在服务级别编辑或者储存配置信息,那么CP是必须的,K8S服务和DNS服务则是用于CP模式。CP模式下则支持注册持久化实例,此时则是以Raft协议为集群运行模式,该模式下注册实例之前必须先注册服务,如果服务不存在,则会返回错误。
  3. 切换命令(默认是AP)
    curl -X PUT ‘$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP’

注意:临时和持久化的区别主要在健康检查失败后的表现,持久化实例健康检查失败后会被标记成不健康,而临时实例会直接从列表中被删除。

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

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

相关文章

NOIP2012提高组day1-T3:开车旅行

题目链接 [NOIP2012 提高组] 开车旅行 题目描述 小 A \text{A} A 和小 B \text{B} B 决定利用假期外出旅行&#xff0c;他们将想去的城市从 1 1 1 到 n n n 编号&#xff0c;且编号较小的城市在编号较大的城市的西边&#xff0c;已知各个城市的海拔高度互不相同&#xf…

Word2Vec的CBOW模型

Word2Vec中的CBOW&#xff08;Continuous Bag of Words&#xff09;模型是一种用于学习词向量的神经网络模型。CBOW的核心思想是根据上下文中的周围单词来预测目标单词。 例如&#xff0c;对于句子“The cat climbed up the tree”&#xff0c;如果窗口大小为5&#xff0c;那么…

websocket: 了解并利用nodejs实现webSocket前后端通信

目录 第一章 前言 1.1 起源 1.2 短轮询与长轮询 1.2.1 短轮询 1.2.2 长轮询 1.2.3 长连接&#xff08;SSE&#xff09; 1.2.4 websocket 第二章 利用Node以及ws创建webSocket服务器 2.1 创建ws服务器&#xff08;后端部分&#xff09; 2.1.1 了解一下 2.1.2 代创建W…

day-05 删除子串后的字符串最小长度

思路 通过不断地检查是否含有"AB"或"CD"&#xff0c;如果有则将其从字符串中删除&#xff0c;直到"AB"或"CD"都不存在时&#xff0c;返回字符串的长度 解题方法 //检测是否有"AB" for(int i0;i<len-1;i){ if(s.charAt(i…

【Python】使用tkinter设计开发Windows桌面程序记事本(1)

下一篇&#xff1a; 记事本介绍 电脑记事本是一种简单的文本编辑器&#xff0c;用于在电脑上创建、编辑和存储文本文件。它通常被用作轻量级的文本编辑工具&#xff0c;适用于简单的文本编辑任务&#xff0c;如写日记、做笔记、编写代码等。以下是对电脑记事本的详细介绍&…

LeetCode刷题--- 最小路径和

个人主页&#xff1a;元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏 力扣递归算法题 http://t.csdnimg.cn/yUl2I 【C】 ​​​​​​http://t.csdnimg.cn/6AbpV 数据结构与算法 ​​​http://t.csdnimg.cn/hKh2l 前言&#xff1a;这个专栏主要讲述动…

wireshark使用教程

目录 windows平台安装Wireshark组件选择Additional TasksPacket CaptureUSB CaptureNpcap Installation Options Ubuntu上安装 Wireshark不使用 sudo 运行 Wireshark 使用GUI抓包使用命令行抓包确定抓取哪个网卡的报文抓取数据包停止抓包设置过滤条件 参考资料 Wireshark 是一款…

救赎之道,就在其中

时光荏苒&#xff0c;不知不觉距离我踏入职场的第一天已经快一年了。最近也是看到平台举办年度征文活动&#xff0c;借此契机重新审视自己这两年来的成长历程&#xff0c;也希望对正在迷茫的人提供一些精神上的慰藉。 1.对未来的迷茫 如果要给两年前的自己打上标签&#xff0…

Flink-CEP 实战教程

文章目录 1. 基本概念1.1 CEP 是什么1.2 模式&#xff08;Pattern&#xff09;1.3 应用场景 2. 快速上手2.1 引入依赖2.2 入门实例 3. 模式API&#xff08;Pattern API&#xff09;3.1 个体模式3.1.1 基本形式3.1.2 量词&#xff08;Quantifiers &#xff09;3.1.3 条件&#x…

KVM系统虚拟化性能测试过程总结

buildroot编译 为啥要用buildroot 支持很多&#xff1a;交叉编译工具链、根文件系统生成、内核映像编译和引导加载程序编译。使用简单&#xff1a;使用类似内核的menuconfig、gconfig和xconfig配置界面&#xff0c;使用buildroot构建基本系统很容易。支持很多的包&#xff1a…

蓝凌EIS智慧协同平台 ShowUserInfo.aspx sql注入漏洞

漏洞描述&#xff1a; 蓝凌EIS智慧协同平台是一个简单、高效的工作方式专为成长型企业打造的沟通、协同、社交的移动办公平台&#xff0c;覆盖OA、沟通、客户、人事、知识等管理需求&#xff0c;集合了非常丰富的模块&#xff0c;满足组织企业在知识、项目管理系统建设等需求的…

[Linux进程(一)] 什么是进程?PCB的底层是什么?以及进程标识符pid与ppid

文章目录 1、前言2、描述进程 — PCB(os怎么管理进程呢)3、查看进程3.1 方法一3.2 方法二 4、系统调用获取进程标示符(PID)4.1 获取进程的ID4.2 获取进程的父进程ID 5、系统调用创建子进程-fork 1、前言 大家经常都在讲进程&#xff0c;而它到底是什么呢&#xff1f; 这里给大…

x-cmd pkg | dua - 磁盘使用分析器

目录 简介首次用户技术特点竞品和相关作品进一步阅读 简介 dua 是 Disk Usage Analyzer 的简写&#xff0c;该工具可以快速查看给定目录的磁盘空间使用情况。 对于想要深入了解磁盘空间使用情况并有效管理存储的用户来说&#xff0c;Dua 是一个很有价值的工具。通过使用 Dua …

Java流程控制的陷阱

文章目录 1. switch中break的作用2. switch支持的数据类型3. else隐含的条件4. 省略花括号的陷阱5. for循环的结构6. 使用标签跳出双层for循环 流程控制三种&#xff1a;顺序结构、分支结构、循环结构 分支机构两种&#xff1a;if语句、switch语句 循环结构&#xff1a;while循…

每日一篇英语文章分享:I have a dream. 争取早日阅读论文自由.

我有一个梦想》&#xff08;英文&#xff1a;I have a dream&#xff09;是美国黑人民权运动领袖马丁路德金于1963年8月28日在华盛顿林肯纪念堂发表的纪念性演讲。 《我有一个梦想》是马丁路德金在美国黑人受种族歧视和迫害由来已久的背景下&#xff0c;为了推动美国国内黑人争…

安达发|APS智能排产软件有哪些条件约束功能

APS智能排产软件是一种基于先进算法和人工智能技术的生产计划与调度系统&#xff0c;它可以帮助企业实现生产资源的优化配置&#xff0c;提高生产效率和降低生产成本。在实际应用中&#xff0c;APS智能排产软件需要满足多种条件约束功能&#xff0c;以满足不同企业的需求。以下…

python 和shell 变量互相传递

嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 主要介绍python和shell变量互相传递方法&#xff0c;使用了环境变量、管道等方法。 python -> shell&#xff1a; 1.环境变量 import os var123或var123 o…

【手搓深度学习算法】用线性回归预测波士顿房价

线性回归 线性回归是一种监督学习方法&#xff0c;用于建立因变量与一个或多个自变量之间的关系。线性回归的目标是找到一条直线&#xff0c;使得所有数据点到这条直线的距离之和最小。 线性回归的基本形式如下&#xff1a; y β 0 β 1 x 1 β 2 x 2 . . . β n x n ϵ…

Linux学习之网络编程(纯理论)

写在前面 刚刚更新完Linux系统编程&#xff0c;特别推荐大家去看的Linux系统编程&#xff0c;总共44个小时&#xff0c;老师讲的非常好&#xff0c;我是十天肝完的&#xff0c;每天大概看20集&#xff0c;每天还要以写blog的形式来写笔记来总结一下&#xff0c;虽然这十天有点…

printk的使用与理解

文章目录 一、理清printk二、printk的使用三、printk的打印级别1、基本解释2、详细解释3、如何修改console_loglevel、default_message_loglevel、minimum_console_loglevel、default_console_loglevel的值 四、printk的输出地方五、其它 一、理清printk printk如何使用&#…