Nacos基本应用

news2024/12/30 3:40:35

Nacos 基本应用

Nacos 提供了 SDK 和 OpenAPI 方式来完成服务注册与发现等操作,SDK 实际上是对于 http 请求的封装。

微服务架构的电子商务平台,其中包含订单服务、商品服务和用户服务。可以使用 Nacos 作为服务注册和发现的中心,以便各个微服务可以相互发现和调用。

首先在 Nacos 中注册订单服务、商品服务和用户服务的实例。每个微服务会向 Nacos 注册自己的服务名和实例信息,包括 IP 地址和端口号。 当订单服务需要调用商品服务时,它可以通过 Nacos 的服务发现功能获取商品服务的实例列表。然后,订单服务可以根据负载均衡策略选择一个商品服务的实例进行调用。 另外当用户服务需要调用订单服务时,它也可以通过 Nacos 的服务发现功能获取订单服务的实例列表。然后用户服务可以根据负载均衡策略选择一个订单服务的实例进行调用。

通过使用 Nacos,可以实现微服务之间的动态调用和发现,提高系统的可伸缩性和可扩展性。此外 Nacos 还提供了配置管理和服务路由等功能,可以进一步优化和管理微服务架构。很明显使用 Nacos 可以简化微服务架构的管理和调用,提高系统的可靠性和可维护性。

windows 下安装简单,下载后解压到任意不包含中文内容的路径位置,在 conf/application.properties 中可以配置服务端口号,默认端口号为 8848。

bin/startup.cmd -m standalone 即可启动 nacos 服务器,参数 m 就是模式的含义,nacos 有单机和集群启动不同的模式

http://localhost:8848/nacos 即可访问服务,默认密码是 nacos/nacos

服务注册:

首先在父工程中添加 spring-cloud-alibaba 的管理依赖<dependencyManagement>

spring-cloud-alibaba-denpendencies pom import

dependencyManagement 元素提供了一种管理依赖版本号的方式。在 dependencyManagement 元素中声明所依赖的 jar 包的版本号等信息,那么所有子项目再次引入此依赖 jar 包时则无需显式的列出版本号。Maven

会沿着父子层级向上寻找拥有dependencyManagement元素的项目,然后使用它指定的版本号。

添加客户端依赖:spring-cloud-starter-alibaba-nacos-discovery

application.yml 中添加 nacos 服务的地址 spring.cloud.nacos.discovery.server-addr=localhost:8848,默认值实际上就是 localhost:8848

服务消费:

@Autowired
private RestTemplate restTemplate;
@Autowired
private DiscoveryClient discoveryClient;

专门负责服务注册和发现的,可以通过它获取到注册到注册中心的所有服务

List<ServiceInstance> instances = discoveryClient.getInstances("nacos-service");
Random r=new Random();
ServiceInstance si=instances.get(r.nextInt(instances.size()));
String str = restTemplate.getForObject("http://" + si.getHost() + ":" + si.getPort()     +
    "/test/hello?name=" + name, String.class);
String url = serviceInstance.getUri().toString();
Product p=restTemplate.getForObject(url+"/product/"+pid,Product.class);

通过 restTemplate 调用商品微服务

将一个服务多次启动,在启动配置中设置端口号

在这里插入图片描述

对应 VM 配置:设置端口号

在这里插入图片描述

每个 SpringCloud 服务器启动后向注册中心注册本服务器信息,如服务别名、服务器 IP、端口号等,其他服务进行请求时先根据服务别名从注册中心获取到目标服务器 IP 和端口号,并将获取到的信息缓存到本地,然后通过本地使用 HttpClient 等技术进行远程调用。

在这里插入图片描述

Nacos 服务注册发现步骤

1、服务提供者将注册信息写入到 Nacos 注册中心的服务注册表中

2、服务注册中心将服务提供者的实例交给服务持有容器 Service Holder 处理,服务实例将会挂载在 ServiceHolder 的空间下

3、服务注册成功后,提供者将与服务中心维持心跳,未能及时发送心跳的服务将会被剔除

4、服务发现支持两种场景

  • 消费者可以直接向注册中心发送获取某个服务实例的请求,这种情况下注册中心将返回所有可用的服务实例给消费者,但是一般不推荐这种情况

  • List<ServiceInstance> serviceInstances = discoveryClient.getInstances("hello-service");

    服务的消费者向注册中心订阅某个服务,并提交一个监听器,当注册中心中服务发生变更时,监听器会收到通知,这时消费者更新本地的服务实例列表,以保证所有的服务均是可用的

服务注册

1、微服务在启动时,将自己的网络地址等信息注册到服务发现组件 nacos server 中,服务发现组件会存储这些信息。

2、各个微服务与服务发现组件使用一定机制通信,在一定的时间内发送心跳包。服务发现组件若发现与某微服务实例通信正常则保持注册状态(up 在线状态)、若长时间无法与某微服务实例通信,就会自动注销(即删除)该实例

3、服务消费者可从服务发现组件查询服务提供者的网络地址,并使用该地址调用服务提供者的接口。

4、当微服务网络地址发生变更(例如实例增减或者 IP 端口发生变化等)时,会重新注册到服务发现组件。

负载均衡 loadbalance

可以利用 DiscoveryClient 实现客户端的数据拉取和负载均衡,但是处理过程需要自行编码实现,重复编码就是一个问题。事实上编码没有这么麻烦,可以使用 Ribbon 组件或者 Springcloud loadbalance 组件实现的。

List<ServiceInstance> serviceInstances = discoveryClient.getInstances("hello-service");
Random r=new Random();
ServiceInstance instance = serviceInstances.get(r.nextInt(serviceInstances.size()));

负载均衡 Load Balance 就是将用户的请求平均的分配到多个服务上,从而达到系统的高可用,它是一种算法,可以通过该算法实现从地址列表中获取一个地址进行服务调用,LB 实现方式包含集中式(在消费者和服务提供方中间使用独立的代理方式进行负载均衡)和进程内(根据自己的请求情况做负载均衡)两种。

Nginx 服务器负载均衡,客户端所有请求都会交给 Nginx,然后 Nginx 实现转发请求,属于集中式实现负载均衡;

Ribbon 本地负载均衡,在调用微服务接口的时候,会在注册中心上获取注册信息服务列表后缓存到本地,从而在本地实现 RPC 远程服务调用,属于进程内实现负载均衡。

依赖:spring-cloud-starter-loadbalancer,需要添加 alibaba 和 cloud

RestTemplate 的生成方法上添加@LoadBalanced 注解

@LoadBalanced 是标识注解,用于告知系统这里的请求应该通过负载均衡组件进行拦截和处理。实际上是通过实现了 ClientHttpRequestInterceptor 接口的 LoadBalancerInterceptor 实现拦截的,可以在 intercept 方法上添加断点查看源码

@Bean
@LoadBalanced
public RestTemplate restTemplate() {
    return new RestTemplate(); }
@RestController
public class ConsumerController {
    @Autowired
    private RestTemplate restTemplate;
    @GetMapping("/say")
    public String say(@RequestParam(required = false) String name) {
        String ss = restTemplate.getForObject("http://provider-service/hello?name={0}", 
String.class, name);
        ss = "{ConsumerController}---" + ss;
        return ss; 
    }
}

在这里插入图片描述

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

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

相关文章

aijs 盒子出血

效果演示 盒子出血演示 1.左下点 2.左上点 3.上左点 var doc activeDocument; var pt 72 / 25.4; var cx 3 * pt;var marks []; for (var i 0; i < doc.selection.length; i) {var shape doc.selection[i];if (shape.typename GroupItem && shape.pageItems.…

2023年深度学习最新研究成果

LLMs领域 AGI领域 无剑芯片设计平台 三级标题 四级标题 五级标题 六级标题

使用fopen等标准C库来操作文件

fopen 需要的头文件&#xff1a; #include <stdio.h> 函数原型&#xff1a; FILE *fopen(const char *pathname, const char *mode); 参数&#xff1a; pathname: 文件路径mode: “r” &#xff1a;以只读方式打开文件&#xff0c;该文件必须存在。“w” &#xff…

省电模式稳定电压显示IC32×4 LCD显示驱动芯片

简述 VK1C21A是一个点阵式存储映射的LCD驱动器&#xff0c;可支持最大128点&#xff08;32SEGx4COM&#xff09; 的LCD屏&#xff0c;也支持2COM和3COM的LCD屏。单片机可通过3/4个通信脚配置显示参数和发 送显示数据&#xff0c;也可通过指令进入省电模式。具备高抗干扰&a…

攻防演练的开局之战,泛资产暴露面检测

原文地址 全国信息安全攻防演练&#xff0c;已经蓄势待发。在网络安全的棋盘上&#xff0c;新型攻击手段不断涌现&#xff0c;不仅影子资产成为攻击的目标&#xff0c;邮件钓鱼、代码和配置文件泄露&#xff0c;甚至关联的供应链公司的安全缺陷都可能成为攻击者钻营的突破口。因…

AirServer2023最新Mac苹果电脑系统投屏软件

AirServer是一个Mac专用投屏工具&#xff0c;功能强大&#xff0c;并且可以通过网络和其他平台同步视频内容。可以使用多个设备进行投屏&#xff0c;快速查看同一局域网内的视频。支持的设备&#xff1a;苹果系统。支持 Windows、 Mac、 Android、 iOS、 windows平台。通过这款…

Simulink仿真模块 - Compare To Zero

Compare To Zero:确定信号与零的比较方式 库:Simulink / Logic and Bit Operations HDL Coder / Logic and Bit Operations 模型为: 双击模型打开参数设置界面为: 说明 Compare To Zero 模块将输入信号与零进行比较。使用 Operator 参数指定输入与零的比较方式。 …

python免费下载安装教程,python编程软件 免安装

本篇文章给大家谈谈python免费下载安装教程&#xff0c;以及python编程软件 免安装&#xff0c;希望对各位有所帮助&#xff0c;不要忘了收藏本站喔。 百度网盘 请输入提取码 提取码: wifx 下载好记得把python文件解压&#xff0c;里面有32位和64位的&#xff0c;根据自己配置…

界面控件DevExpress WPF Chart组件——拥有超快的数据可视化库!

DevExpress WPF Chart组件拥有超大的可视化数据集&#xff0c;并提供交互式仪表板与高性能WPF图表库。DevExpress Charts提供了全面的2D / 3D图形集合&#xff0c;包括数十个UI定制和数据分析/数据挖掘选项。 PS&#xff1a;DevExpress WPF拥有120个控件和库&#xff0c;将帮助…

基于PHP的轻量级博客typecho

本文完成于 5 月中旬&#xff0c;发布时未在最新版本上验证&#xff1b; 什么是 typecho &#xff1f; Typecho 是一款基于 PHP 的博客软件&#xff0c;旨在成为世界上最强大的博客引擎。Typecho 在 GNU 通用公共许可证 2.0 下发布。支持多种数据库&#xff0c;原生支持 Markdo…

何时构建你的护城河?不确定性、成功和防御性

原文&#xff1a;www.notboring.co/p/when-to-dig-a-moat shadow 本文相当有启发性&#xff0c;我做了关键内容的整理&#xff0c;分享给大家&#xff1a; 不确定性、成功和防御性 Uncertainty Success Defensibility 有一种观点&#xff1a;如果你拥有最有才华的团队、最好的产…

设备管理系统:提升生产制造企业效率与竞争力的关键

在现代生产制造行业中&#xff0c;设备是企业生产力的核心。有效管理和维护设备对于提高生产效率、降低成本、确保产品质量至关重要。为了满足这些需求&#xff0c;越来越多的生产制造企业开始采用设备管理系统。本文将探讨设备管理系统的重要性以及它对企业的益处。 设备管理…

Stable Diffusion - 运动服 (Gymwear Leggings) 风格服装与背景的 LoRA 配置

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/132179050 测试模型&#xff1a;DreamShaper 8 运动裤 (Gymwear Leggings) 是紧身的裤子&#xff0c;通常用于健身、瑜伽、跑步等运动。运动裤的…

促使中本聪隐退的Paypal推出了链上稳定币PYUSD

号外&#xff1a; 1. 今天在「刘教链内参」发表了《内参&#xff1a;DAI DSR存款利率上调至8%&#xff0c;超过美联邦利率》&#xff0c;欢迎关注公众号「刘教链内参」并阅读。 2. 在公众号「刘教链Pro」发表了文章《8%高息揽储&#xff0c;馅饼还是陷阱&#xff1f;》&#xf…

BEM命名规范

参加了一个团队开发的小项目&#xff0c;代码写完了一看别人的感觉自己写的老不规范了&#xff0c;后知后觉才看到开发文档里面的样式书写规范。感觉要大改了……也算给自己长个记性要先读完所有文档在开始。 也学习了解了一下BEM命名规范。 1. 什么是BEM&#xff1f; BEM&a…

自适应变异麻雀搜索算法及其Matlab实现

麻雀搜索算法( sparrow search algorithm&#xff0c;SSA) 是2020 年新提出的一种元启发式算法[1]&#xff0c;它是受麻雀种群的觅食和反捕食行为启发&#xff0c;将搜索群体分为发现者、加入者和侦察者 3 部分&#xff0c;其相互分工寻找最优值&#xff0c;通过 19 个标准测试…

【力扣每日一题】2023.8.9 整数的各位积和之差

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 这是一道简单题&#xff0c;题目就是给我们一个整数&#xff0c;让我们把这个数的各个位数都乘起来再减去各个位数加起来的值。 这好像没…

任务15、MidJourney视频(Video)参数动态上线,制作惊艳动画短片

15.1 任务概述 本次任务将帮助你掌握Midjourney中的Video参数,并利用这些参数创作出令人惊艳的绘画作品。通过学习Video参数的基本概念和功能,以及案例的实际应用,你将学会如何正确设置和调整这些参数,从而达到你所期望的绘画效果。最终,你将运用所学知识,生成香奈儿模特…

2023牛客暑期多校训练营7 L.Misaka Mikoto‘s Dynamic KMP Problem(KMP))

文章目录 题目大意题解参考代码 题目大意 题解 注意 ∑ ∣ t ∣ ≤ 2 ∗ 1 0 6 \sum{|t|} \leq 2*10^6 ∑∣t∣≤2∗106。 对于每一组操作 2 2 2 我们发现可以用 k m p kmp kmp 处理&#xff0c;复杂度为 2 ∗ ∣ s ∣ 2*|s| 2∗∣s∣ 。 明显的&#xff0c;当 s i z t &…

Arcgis将一个shp依照属性表导出为多个shp

# -*- coding:utf-8 -*-import arcpy import osfrom arcpy import env#env.workspace "./" #自己设置路径shp rC:\Users\Administrator\Desktop\Lake\xxx.shp #shp文件路径outpath r"C:\Users\Administrator\Desktop\Lake\fenli" #输出结果路径with arc…