相关推荐recommended
【愚公系列】2023年11月 Java教学课程 186-SpringCloud(Nacos注册中心)
作者:mmseoamin日期:2023-12-05

【愚公系列】2023年11月 Java教学课程 186-SpringCloud(Nacos注册中心),在这里插入图片描述,第1张

🏆 作者简介,愚公搬代码

🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,51CTO博客专家等。

🏆《近期荣誉》:2022年CSDN博客之星TOP2,2022年华为云十佳博主等。

🏆《博客内容》:.NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。

🏆🎉欢迎 👍点赞✍评论⭐收藏

文章目录

  • 🚀前言
  • 🚀一、Nacos的安装
    • 🔎1.Windows安装
      • 🦋1.1 下载安装包
      • 🦋1.2 解压
      • 🦋1.3 端口配置
      • 🦋1.4 启动
      • 🦋1.5 访问
      • 🔎2.Linux安装
        • 🦋2.1 安装JDK
        • 🦋2.2 上传安装包
        • 🦋2.3 解压
        • 🦋2.4 端口配置
        • 🦋2.5 启动
        • 🔎3.Nacos的依赖
        • 🚀二、Nacos注册中心
          • 🔎1.认识和安装Nacos
          • 🔎2.服务注册到nacos
            • 🦋2.1 引入依赖
            • 🦋2.2 配置nacos地址
            • 🦋2.3 重启
            • 🔎3.服务分级存储模型
              • 🦋3.1 给user-service配置集群
              • 🦋3.2 同集群优先的负载均衡
              • 🔎4.权重配置
              • 🔎5.环境隔离
                • 🦋5.1 创建namespace
                • 🦋5.2 给微服务配置namespace
                • 🔎6.Nacos与Eureka的区别
                • 🚀感谢:给读者的一封信

                  🚀前言

                  微服务注册中心是一个管理微服务的工具,可以帮助微服务在分布式系统中发现、注册和协调服务之间的交互。它是微服务架构的核心组件之一,负责维护服务注册表,提供服务发现、负载均衡、故障恢复等功能,使得微服务能够更好地运行和协作。常见的微服务注册中心有Consul、Eureka、Zookeeper等。

                  🚀一、Nacos的安装

                  Nacos是一个开源的注册中心和配置中心,可以支持多种语言和多种部署方式。作为注册中心,Nacos可以帮助服务发现和服务治理。当服务提供者启动并注册到Nacos注册中心上时,服务消费者就可以从注册中心上获取服务提供者的信息,完成服务的调用。此外,Nacos还支持动态配置管理,可以帮助应用程序动态管理配置信息,如修改应用程序的配置信息,而无需重新启动应用程序。Nacos的特点在于简单易用、高可用性、支持多数据中心、支持多环境部署、支持多种协议和语言。

                  🔎1.Windows安装

                  🦋1.1 下载安装包

                  在Nacos的GitHub页面,提供有下载链接,可以下载编译好的Nacos服务端或者源代码:

                  GitHub主页:https://github.com/alibaba/nacos

                  GitHub的Release下载页:https://github.com/alibaba/nacos/releases

                  官网地址:https://nacos.io/zh-cn/index.html

                  【愚公系列】2023年11月 Java教学课程 186-SpringCloud(Nacos注册中心),在这里插入图片描述,第2张

                  本文主要使用1.4.1版本的Nacos。

                  【愚公系列】2023年11月 Java教学课程 186-SpringCloud(Nacos注册中心),在这里插入图片描述,第3张

                  windows版本使用nacos-server-1.4.1.zip包即可。

                  🦋1.2 解压

                  将这个包解压到任意非中文目录下,如图:

                  【愚公系列】2023年11月 Java教学课程 186-SpringCloud(Nacos注册中心),在这里插入图片描述,第4张

                  目录说明:

                  • bin:启动脚本
                  • conf:配置文件

                    🦋1.3 端口配置

                    Nacos的默认端口是8848,如果你电脑上的其它进程占用了8848端口,请先尝试关闭该进程。

                    如果无法关闭占用8848端口的进程,也可以进入nacos的conf目录,修改配置文件中的端口:

                    【愚公系列】2023年11月 Java教学课程 186-SpringCloud(Nacos注册中心),在这里插入图片描述,第5张

                    修改其中的内容:

                    【愚公系列】2023年11月 Java教学课程 186-SpringCloud(Nacos注册中心),在这里插入图片描述,第6张

                    🦋1.4 启动

                    启动非常简单,进入bin目录,结构如下:

                    【愚公系列】2023年11月 Java教学课程 186-SpringCloud(Nacos注册中心),在这里插入图片描述,第7张

                    然后执行命令即可:

                    • windows命令:

                      startup.cmd -m standalone
                      

                      执行后的效果如图:

                      【愚公系列】2023年11月 Java教学课程 186-SpringCloud(Nacos注册中心),在这里插入图片描述,第8张

                      🦋1.5 访问

                      在浏览器输入地址:http://127.0.0.1:8848/nacos即可:

                      【愚公系列】2023年11月 Java教学课程 186-SpringCloud(Nacos注册中心),在这里插入图片描述,第9张

                      默认的账号和密码都是nacos,进入后:

                      【愚公系列】2023年11月 Java教学课程 186-SpringCloud(Nacos注册中心),在这里插入图片描述,第10张

                      🔎2.Linux安装

                      Linux或者Mac安装方式与Windows类似。

                      🦋2.1 安装JDK

                      Nacos依赖于JDK运行,索引Linux上也需要安装JDK才行。

                      上传jdk安装包:

                      【愚公系列】2023年11月 Java教学课程 186-SpringCloud(Nacos注册中心),在这里插入图片描述,第11张

                      上传到某个目录,例如:/usr/local/

                      然后解压缩:

                      tar -xvf jdk-8u144-linux-x64.tar.gz
                      

                      然后重命名为java

                      配置环境变量:

                      export JAVA_HOME=/usr/local/java
                      export PATH=$PATH:$JAVA_HOME/bin
                      

                      设置环境变量:

                      source /etc/profile
                      

                      🦋2.2 上传安装包

                      如图:

                      【愚公系列】2023年11月 Java教学课程 186-SpringCloud(Nacos注册中心),在这里插入图片描述,第12张

                      上传到Linux服务器的某个目录,例如/usr/local/src目录下:

                      【愚公系列】2023年11月 Java教学课程 186-SpringCloud(Nacos注册中心),在这里插入图片描述,第13张

                      🦋2.3 解压

                      命令解压缩安装包:

                      tar -xvf nacos-server-1.4.1.tar.gz
                      

                      然后删除安装包:

                      rm -rf nacos-server-1.4.1.tar.gz
                      

                      目录中最终样式:

                      【愚公系列】2023年11月 Java教学课程 186-SpringCloud(Nacos注册中心),在这里插入图片描述,第14张

                      目录内部:

                      【愚公系列】2023年11月 Java教学课程 186-SpringCloud(Nacos注册中心),在这里插入图片描述,第15张

                      🦋2.4 端口配置

                      与windows中类似

                      🦋2.5 启动

                      在nacos/bin目录中,输入命令启动Nacos:

                      sh startup.sh -m standalone
                      

                      🔎3.Nacos的依赖

                      父工程:

                      
                          com.alibaba.cloud
                          spring-cloud-alibaba-dependencies
                          2.2.5.RELEASE
                          pom
                          import
                      
                      

                      客户端:

                      
                      
                          com.alibaba.cloud
                          spring-cloud-starter-alibaba-nacos-discovery
                      
                      

                      🚀二、Nacos注册中心

                      🔎1.认识和安装Nacos

                      Nacos是一个开源的注册中心和配置中心,可以支持多种语言和多种部署方式。作为注册中心,Nacos可以帮助服务发现和服务治理。当服务提供者启动并注册到Nacos注册中心上时,服务消费者就可以从注册中心上获取服务提供者的信息,完成服务的调用。此外,Nacos还支持动态配置管理,可以帮助应用程序动态管理配置信息,如修改应用程序的配置信息,而无需重新启动应用程序。Nacos的特点在于简单易用、高可用性、支持多数据中心、支持多环境部署、支持多种协议和语言。

                      Nacos是阿里巴巴的产品,现在是SpringCloud中的一个组件。相比Eureka功能更加丰富,在国内受欢迎程度较高。

                      🔎2.服务注册到nacos

                      Nacos是SpringCloudAlibaba的组件,而SpringCloudAlibaba也遵循SpringCloud中定义的服务注册、服务发现规范。因此使用Nacos和使用Eureka对于微服务来说,并没有太大区别。

                      主要差异在于:

                      • 依赖不同
                      • 服务地址不同

                        🦋2.1 引入依赖

                        在cloud-demo父工程的pom文件中的中引入SpringCloudAlibaba的依赖:

                        
                            com.alibaba.cloud
                            spring-cloud-alibaba-dependencies
                            2.2.6.RELEASE
                            pom
                            import
                        
                        

                        然后在user-service和order-service中的pom文件中引入nacos-discovery依赖:

                        
                            com.alibaba.cloud
                            spring-cloud-starter-alibaba-nacos-discovery
                        
                        

                        注意:不要忘了注释掉eureka的依赖。

                        🦋2.2 配置nacos地址

                        在user-service和order-service的application.yml中添加nacos地址:

                        spring:
                          cloud:
                            nacos:
                              server-addr: localhost:8848
                        

                        注意:不要忘了注释掉eureka的地址

                        🦋2.3 重启

                        重启微服务后,登录nacos管理页面,可以看到微服务信息:

                        【愚公系列】2023年11月 Java教学课程 186-SpringCloud(Nacos注册中心),在这里插入图片描述,第16张

                        请求接口

                        【愚公系列】2023年11月 Java教学课程 186-SpringCloud(Nacos注册中心),在这里插入图片描述,第17张

                        🔎3.服务分级存储模型

                        一个服务可以有多个实例,例如我们的user-service,可以有:

                        • 127.0.0.1:8081
                        • 127.0.0.1:8082
                        • 127.0.0.1:8083

                          假如这些实例分布于全国各地的不同机房,例如:

                          • 127.0.0.1:8081,在上海机房
                          • 127.0.0.1:8082,在上海机房
                          • 127.0.0.1:8083,在杭州机房

                            Nacos就将同一机房内的实例 划分为一个集群

                            也就是说,user-service是服务,一个服务可以包含多个集群,如杭州、上海,每个集群下可以有多个实例,形成分级模型,如图:

                            【愚公系列】2023年11月 Java教学课程 186-SpringCloud(Nacos注册中心),在这里插入图片描述,第18张

                            微服务互相访问时,应该尽可能访问同集群实例,因为本地访问速度更快。当本集群内不可用时,才访问其它集群。例如:

                            【愚公系列】2023年11月 Java教学课程 186-SpringCloud(Nacos注册中心),在这里插入图片描述,第19张

                            杭州机房内的order-service应该优先访问同机房的user-service。

                            🦋3.1 给user-service配置集群

                            修改user-service的application.yml文件,添加集群配置:

                            spring:
                              cloud:
                                nacos:
                                  server-addr: localhost:8848
                                  discovery:
                                    cluster-name: HZ # 集群名称
                            

                            重启两个user-service实例后,我们可以在nacos控制台看到下面结果:

                            【愚公系列】2023年11月 Java教学课程 186-SpringCloud(Nacos注册中心),在这里插入图片描述,第20张

                            我们再次复制一个user-service启动配置,添加属性:

                            -Dserver.port=8083 -Dspring.cloud.nacos.discovery.cluster-name=SH
                            

                            启动UserApplication3后再次查看nacos控制台:

                            【愚公系列】2023年11月 Java教学课程 186-SpringCloud(Nacos注册中心),在这里插入图片描述,第21张

                            🦋3.2 同集群优先的负载均衡

                            默认的ZoneAvoidanceRule并不能实现根据同集群优先来实现负载均衡。

                            因此Nacos中提供了一个NacosRule的实现,可以优先从同集群中挑选实例。

                            1)给order-service配置集群信息

                            修改order-service的application.yml文件,添加集群配置:

                            spring:
                              cloud:
                                nacos:
                                  server-addr: localhost:8848
                                  discovery:
                                    cluster-name: HZ # 集群名称
                            

                            2)修改负载均衡规则

                            修改order-service的application.yml文件,修改负载均衡规则:

                            userservice:
                              ribbon:
                                NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则 
                            

                            🔎4.权重配置

                            实际部署中会出现这样的场景:

                            服务器设备性能有差异,部分实例所在机器性能较好,另一些较差,我们希望性能好的机器承担更多的用户请求。

                            但默认情况下NacosRule是同集群内随机挑选,不会考虑机器的性能问题。

                            因此,Nacos提供了权重配置来控制访问频率,权重越大则访问频率越高。

                            在nacos控制台,找到user-service的实例列表,点击编辑,即可修改权重:

                            【愚公系列】2023年11月 Java教学课程 186-SpringCloud(Nacos注册中心),在这里插入图片描述,第22张

                            在弹出的编辑窗口,修改权重:

                            【愚公系列】2023年11月 Java教学课程 186-SpringCloud(Nacos注册中心),在这里插入图片描述,第23张

                            注意:如果权重修改为0,则该实例永远不会被访问

                            🔎5.环境隔离

                            Nacos提供了namespace来实现环境隔离功能。

                            • nacos中可以有多个namespace
                            • namespace下可以有group、service等
                            • 不同namespace之间相互隔离,例如不同namespace的服务互相不可见

                              【愚公系列】2023年11月 Java教学课程 186-SpringCloud(Nacos注册中心),在这里插入图片描述,第24张

                              🦋5.1 创建namespace

                              默认情况下,所有service、data、group都在同一个namespace,名为public:

                              【愚公系列】2023年11月 Java教学课程 186-SpringCloud(Nacos注册中心),在这里插入图片描述,第25张

                              我们可以点击页面新增按钮,添加一个namespace:

                              【愚公系列】2023年11月 Java教学课程 186-SpringCloud(Nacos注册中心),在这里插入图片描述,第26张

                              然后,填写表单,就能在页面看到一个新的namespace:

                              【愚公系列】2023年11月 Java教学课程 186-SpringCloud(Nacos注册中心),在这里插入图片描述,第27张

                              🦋5.2 给微服务配置namespace

                              给微服务配置namespace只能通过修改配置来实现。

                              例如,修改order-service的application.yml文件:

                              spring:
                                cloud:
                                  nacos:
                                    server-addr: localhost:8848
                                    discovery:
                                      cluster-name: HZ
                                      namespace: 492a7d5d-237b-46a1-a99a-fa8e98e4b0f9 # 命名空间,填ID
                              

                              重启order-service后,访问控制台,可以看到下面的结果:

                              【愚公系列】2023年11月 Java教学课程 186-SpringCloud(Nacos注册中心),在这里插入图片描述,第28张

                              【愚公系列】2023年11月 Java教学课程 186-SpringCloud(Nacos注册中心),在这里插入图片描述,第29张

                              此时访问order-service,因为namespace不同,会导致找不到userservice,控制台会报错:

                              【愚公系列】2023年11月 Java教学课程 186-SpringCloud(Nacos注册中心),在这里插入图片描述,第30张

                              🔎6.Nacos与Eureka的区别

                              Nacos的服务实例分为两种l类型:

                              • 临时实例:如果实例宕机超过一定时间,会从服务列表剔除,默认的类型。

                              • 非临时实例:如果实例宕机,不会从服务列表剔除,也可以叫永久实例。

                                配置一个服务实例为永久实例:

                                spring:
                                  cloud:
                                    nacos:
                                      discovery:
                                        ephemeral: false # 设置为非临时实例
                                

                                Nacos和Eureka整体结构类似,服务注册、服务拉取、心跳等待,但是也存在一些差异:

                                【愚公系列】2023年11月 Java教学课程 186-SpringCloud(Nacos注册中心),在这里插入图片描述,第31张

                                • Nacos与eureka的共同点

                                  • 都支持服务注册和服务拉取
                                  • 都支持服务提供者心跳方式做健康检测
                                  • Nacos与Eureka的区别

                                    • Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式
                                    • 临时实例心跳不正常会被剔除,非临时实例则不会被剔除
                                    • Nacos支持服务列表变更的消息推送模式,服务列表更新更及时
                                    • Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式

                                      🚀感谢:给读者的一封信

                                      亲爱的读者,

                                      我在这篇文章中投入了大量的心血和时间,希望为您提供有价值的内容。这篇文章包含了深入的研究和个人经验,我相信这些信息对您非常有帮助。

                                      如果您觉得这篇文章对您有所帮助,我诚恳地请求您考虑赞赏1元钱的支持。这个金额不会对您的财务状况造成负担,但它会对我继续创作高质量的内容产生积极的影响。

                                      我之所以写这篇文章,是因为我热爱分享有用的知识和见解。您的支持将帮助我继续这个使命,也鼓励我花更多的时间和精力创作更多有价值的内容。

                                      如果您愿意支持我的创作,请扫描下面二维码,您的支持将不胜感激。同时,如果您有任何反馈或建议,也欢迎与我分享。

                                      【愚公系列】2023年11月 Java教学课程 186-SpringCloud(Nacos注册中心),在这里插入图片描述,第32张

                                      再次感谢您的阅读和支持!

                                      最诚挚的问候, “愚公搬代码”