3.微服务项目实战---Nacos Discovery--服务治理

news/2024/4/20 21:07:32/文章来源:https://blog.csdn.net/m0_68408835/article/details/130282402

3.1 服务治理介绍

先来思考一个问题
通过上一章的操作,我们已经可以实现微服务之间的调用。但是我们把服务提供者的网络地址
ip ,端口)等硬编码到了代码中,这种做法存在许多问题:
  • 一旦服务提供者地址变化,就需要手工修改代码
  • 一旦是多个服务提供者,无法实现负载均衡功能
  • 一旦服务变得越来越多,人工维护调用关系困难
那么应该怎么解决呢, 这时候就需要通过注册中心动态的实现 服务治理
什么是服务治理
服务治理是微服务架构中最核心最基本的模块。用于实现各个微服务的 自动化注册与发现
  • 服务注册:在服务治理框架中,都会构建一个注册中心,每个服务单元向注册中心登记自己提供服务的详细信息。并在注册中心形成一张服务的清单,服务注册中心需要以心跳的方式去监测清单中的服务是否可用,如果不可用,需要在服务清单中剔除不可用的服务。
  • 服务发现:服务调用方向服务注册中心咨询服务,并获取所有服务的实例清单,实现对具体服务实例的访问。

 

通过上面的调用图会发现,除了微服务,还有一个组件是 服务注册中心 ,它是微服务架构非常重要
的一个组件,在微服务架构里主要起到了协调者的一个作用。注册中心一般包含如下几个功能:
1. 服务发现:
  • 服务注册:保存服务提供者和服务调用者的信息
  • 服务订阅:服务调用者订阅服务提供者的信息,注册中心向订阅者推送提供者的信息
2. 服务配置:
  • 配置订阅:服务提供者和服务调用者订阅微服务相关的配置
  • 配置下发:主动将配置推送给服务提供者和服务调用者
3. 服务健康检测
  • 检测服务提供者的健康情况,如果发现异常,执行服务剔除
常见的注册中心
  • Zookeeper
      zookeeper 是一个分布式服务框架,是 Apache Hadoop 的一个子项目,它主要是用来解决分布        式 应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分
      布式应用配置项的管理等。
  • Eureka
       Eureka Springcloud Netflflix 中的重要组件,主要作用就是做服务注册和发现。但是现在已
       经闭源
  • Consul
       Consul 是基于 GO 语言开发的开源工具,主要面向分布式,服务化的系统提供服务注册、服务          发现和配置管理的功能。Consul 的功能都很实用,其中包括:服务注册 / 发现、健康检查、               Key/Value 存储、多数据中心和分布式一致性保证等特性。Consul 本身只是一个二进制的可
       执行文件,所以安装和部署都非常简单,只需要从官网下载后,在执行对应的启动脚本即可。
  • Nacos
       Nacos 是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。它是 Spring
       Cloud Alibaba 组件之一,负责服务注册发现和服务配置,可以这样认
       为  nacos=eur eka+confifig

3.2 nacos简介

Nacos 致力于帮助您发现、配置和管理微服务。 Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
从上面的介绍就可以看出, nacos 的作用就是一个注册中心 ,用来管理注册上来的各个微服务。

 

3.3 nacos实战入门

接下来,我们就在现有的环境中加入 nacos ,并将我们的两个微服务注册上去。

3.3.1 搭建nacos环境

1 : 安装 nacos
 
2 : 启动 nacos

 

3 : 访问 nacos
打开浏览器输入 http://localhost:8848/nacos ,即可访问服务, 默认密码是 nacos/nacos

 

3.3.2 将商品微服务注册到nacos

接下来开始修改 shop - product 模块的代码, 将其注册到 nacos 服务上
1 pom.xml 中添加 nacos 的依赖

 

2 在主类上添加 @EnableDiscoveryClient 注解

 

3 application.yml 中添加 nacos 服务的地址

 

4 启动服务, 观察 nacos 的控制面板中是否有注册上来的商品微服务

 

3.3.3 将订单微服务注册到nacos

接下来开始修改 shop_order 模块的代码, 将其注册到 nacos 服务上
1 pom.xml 中添加 nacos 的依赖
2 在主类上添加 @EnableDiscoveryClient 注解
3 application.yml 中添加 nacos 服务的地址

 

4 修改 OrderController , 实现微服务调用
DiscoveryClient是专门负责服务注册和发现的,我们可以通过它获取到注册到注册中心的所有服

 

5 启动服务, 观察 nacos 的控制面板中是否有注册上来的订单微服务,然后通过访问消费者服务验证调用是否成功

 

3.4 实现服务调用的负载均衡

3.4.1 什么是负载均衡

通俗的讲, 负载均衡就是将负载(工作任务,访问请求)进行分摊到多个操作单元(服务器 , 组件)上 进行执行。
根据负载均衡发生位置的不同 , 一般分为 服务端负载均衡 客户端负载均衡
服务端负载均衡指的是发生在服务提供者一方 , 比如常见的 nginx 负载均衡
而客户端负载均衡指的是发生在服务请求的一方,也就是在发送请求之前已经选好了由哪个实例处理请求。

 

我们在微服务调用关系中一般会选择客户端负载均衡,也就是在服务调用的一方来决定服务由哪个提供者执行。

3.4.2 自定义实现负载均衡

1 通过 idea 再启动一个 shop - product 微服务,设置其端口为 8082

 

2 通过 nacos 查看微服务的启动情况
3 修改 shop - order 的代码,实现负载均衡

 

3 步:启动两个服务提供者和一个服务消费者,多访问几次消费者测试效果

 

3.4.3 基于Ribbon实现负载均衡

Ribbon Spring Cloud 的一个组件, 它可以让我们使用一个注解就能轻松的搞定负载均衡
1 步:在 RestTemplate 的生成方法上添加 @LoadBalanced 注解
2 步:修改服务调用的方法

 

Ribbon 支持的负载均衡策略
Ribbon 内置了多种负载均衡策略 , 内部负载均衡的顶级接口为
com.netflix.loadbalancer.IRule , 具体的负载策略如下图所示 :

 

我们可以通过修改配置来调整 Ribbon 的负载均衡策略,具体代码如下

3.5 基于Feign实现服务调用

3.5.1 什么是Feign

Feign Spring Cloud 提供的一个声明式的伪 Http 客户端, 它使得调用远程服务就像调用本地服务
一样简单, 只需要创建一个接口并添加一个注解即可。
Nacos 很好的兼容了 Feign Feign 默认集成了 Ribbon , 所以在 Nacos 下使用 Fegin 默认就实现了负载均衡的效果。

3.5.2 Feign的使用

1 加入 Fegin 的依赖

 

2 在主类上添加 Fegin 的注解
3 创建一个 service , 并使用 Fegin 实现微服务调用

 

4 修改 controller 代码,并启动验证

 

5 重启 order 微服务 , 查看效果

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

精进云原生 - Dubbo 3.2 正式发布

作者:Dubbo 社区 我们非常高兴地宣布,Dubbo 3.2 已经正式发布了!这个版本带来了许多新功能和改进,这也是 Dubbo 在面对云原生化的当下的一次重要的尝试。 背景介绍 Apache Dubbo 是一款 RPC 服务开发框架,用于解决微…

虹科分享 | 如何主动保护个人信息 | 网络安全评级

网上报税和支付越来越流行,针对毫无防备的纳税人的税务欺诈也越来越频繁。以下是一些需要避免的常见网上税务骗局: 网络钓鱼诈骗 骗子利用电子邮件、短信或电话伪装成相关机构或报税软件提供商,诱骗人们提供他们的个人信息,或点击…

【云计算•云原生】1.什么是云计算?它为什么这么火?

文章目录 1.云计算基础什么是云计算云计算的分类开源软件、自由软件、免费软件 2.云计算机制云基础设施机制云管理机制云安全机制基本云架构 3.虚拟化技术服务器虚拟化服务器虚拟化技术CPU虚拟化内存虚拟化设备和I/O虚拟化存储虚拟化网络虚拟化桌面虚拟化 KVM 4.网络与存储基础…

实测有效!手把手带你将 Docker Image 体积减少 90%

Docker Image 体积越大,那部署要花的时间就越长;假如每个版本都有好几 GB,那并不是一个理想的状态;因此笔者开始动手实作,想看看到底能将 Docker Image 的体积缩小多少! 大纲 ㄧ、先初始化一个简易的 Node.js 专案 二、撰写 Dockefile,了解优化前体积有多大 三、使用 No…

通信算法之145:OFDM系统频偏(IFO/FFO)对频域信号影响

carrier frequency offset 1. 整数倍频偏IFO,频域数据相对发送端的数据出现了循环移位,子载波仍然正交。 2.小数倍频偏FFO,频域数据幅度和相位都发生变化,引入了ICI。 无频偏正常星座图 代码:待补充 读者1/2:

2023.4.23第五十次周报

目录 前言 文献阅读:基于ARIMA-WOA-LSTM模型的空气污染物预测 背景 ARIMA-WOA-LSTM模型 思路 主要贡献 积分移动平均自回归 (ARIMA) 鲸鱼优化算法 搜索超参数 CEEMDAN 结论 LSTM-Kriging 主要目标 理论猜想 问1&#xff1a…

Opencv+Python笔记(九)模板匹配

模板匹配 模板匹配常用于对象检测,且实现简单计算效率高。但如果输入图像中存在变化因素如旋转、缩放、视角变化等,模板匹配很容易失效 模板匹配原理: 1.匹配方式为模板 (a * b) 在原图像 (m * n) 上滑动 使用参数method中指定的方法&#…

IJKPLAYER源码分析-常用API

前言 本文简要介绍IJKPLAYER的几个常用API,以API使用的角度,来审视其内部运作原理。这里以iOS端直播API调用切入。 调用流程 init 创建播放器实例后,会先调用init方法进行初始化: - (IJKFFMediaPlayer *)init {self [super ini…

ChatGLM-6B 中文对话模型复现、调用模块、微调及部署实现(更新中)

ChatGLM-6B-PT 一、前言 近期,清华开源了其中文对话大模型的小参数量版本 ChatGLM-6B(GitHub地址:https://github.com/THUDM/ChatGLM-6B)。其不仅可以单卡部署在个人电脑上,甚至 INT4 量化还可以最低部署到 6G 显存的…

SLAM论文速递【SLAM—— RDS-SLAM:基于语义分割方法的实时动态SLAM—4.24(1)

论文信息 题目: RDS-SLAM:Real-Time Dynamic SLAM Using Semantic Segmentation Methods RDS-SLAM:基于语义分割方法的实时动态SLAM论文地址: https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber9318990发表期刊: IEEE Access ( Volum…

新手必看!ChatGPT常见问题总整理,你遇到了几个?

随着ChatGPT火爆全球,使用人数以指数型成长,许多使用上的问题呈现在网路上。 今天这篇文章会用实作的方式带大家了解ChatGPT有哪些常见问题,以此减少踩坑的机会。 并用简单的示例让大家感受GPT-3.5与GPT-4的能力差异,希望对大家有所帮助。 大家会有这些问题,其实就是希望…

SequoiaDB分布式数据库2023.3月刊

本月看点速览 赋能行业,参编《分布式数据库金融应用发展报告》 脱颖而出,入选2022专精特新黑马大赛年度十强 激烈角逐,成功晋级全国信创优秀解决方案决赛 新穗新彩,多家权威媒体走进巨杉 青杉计划2023持续进行,一起…

从源码全面解析 ArrayBlockingQueue 的来龙去脉

👏作者简介:大家好,我是爱敲代码的小黄,独角兽企业的Java开发工程师,CSDN博客专家,阿里云专家博主📕系列专栏:Java设计模式、数据结构和算法、Kafka从入门到成神、Kafka从成神到升仙…

安卓手机(微信小程序)抓蓝牙通信数据包

前言 因为公司需要......所以我就弄了一下,参考了很多别人的文章。 成果:它可以抓取微信小程序、安卓APP的蓝牙数据通信包。 开始 我是小米手机,所以我以我自己手机为例 通信过程操作 第一步 打开开发者选项,打开蓝牙调试日志和蓝牙数据包日志开关(如果两者只有其中…

MAVEN环境变量配置(Windows 11)

1、直接在搜索框中搜:编辑系统环境变量 2、点击环境变量 3、 在系统变量里面新建系统变量 变量名:MAVEN_HOME 变量值:路径一定要写到maven的bin目录下 以下这种写法是错误的 4、新建系统变量完成 5、 往下滑 找到path,可以双击…

什么是gpt一4-如何用上gpt-4

怎么使用gpt-4 目前GPT-4还未正式发布或公开,因此也没有详细的对接说明。但是我们可以根据GPT-4的前身GPT-3的应用经验,以及GPT-4的预期功能推测一些可能的使用步骤: 选择适合的GPT-4实现技术:GPT-4可能有不同的实现技术&#xff…

Opencv+Python笔记(八)轮廓检测

目录 一、轮廓的检测和绘制1.读入图像2.将读入图像转化为灰度图3.对灰度图进行二值化 [图像的阈值化处理](https://blog.csdn.net/Ggs5s_/article/details/130301816?spm1001.2014.3001.5501)4.进行轮廓检测5.在原图中显示轮廓 二、轮廓层级关系1.RET_LIST2.RETR_EXTERNAL3. R…

慈航公益·高莞乡情行

2023年4月9日,慈航公益高莞乡情行---高村陈屋第二届“敬老睦宗情暖乡土”活动日暨“英华教育奖学基金”成立大会在高村陈屋如期举行。 高村陈屋位于河源市连平县境内,为了赶上10点开始的活动,清晨六点半,志愿者们便从慈航出发&am…

Dynamic Slicing for Deep Neural Networks

0、摘要 程序切片已广泛应用于各种软件工程任务中。然而,现有的程序切片技术只能处理由指令和变量构建的传统程序,而不能处理由神经元和突触组成的神经网络。在本文中,我们提出了 NNSlicer,这是第一种基于数据流分析的深度神经网络…