建凡网站,广州工程建设网站,wordpress模板标签查询,做网站 域名不属于一、什么是Nacos
Nacos 是阿里巴巴开源的一款云原生应用基础设施#xff0c;它旨在简化微服务架构中服务治理和配置管理的复杂性。通过 Nacos#xff0c;服务在启动时可以自动注册#xff0c;而其他服务则可以通过名称来查找并访问这些注册好的实例。同时#xff0c;Nacos…一、什么是Nacos
Nacos 是阿里巴巴开源的一款云原生应用基础设施它旨在简化微服务架构中服务治理和配置管理的复杂性。通过 Nacos服务在启动时可以自动注册而其他服务则可以通过名称来查找并访问这些注册好的实例。同时Nacos 内置了实时健康检查机制能够监控各个服务实例的状态确保只有健康的服务节点能够处理请求从而提升整个系统的可靠性和稳定性。此外Nacos 还提供了一个集中化的配置管理平台使得应用能够在运行时动态更新配置而无需重启这不仅大大降低了运维成本也避免了因硬编码或分布式文件更新而带来的各种问题。得益于其与 Kubernetes、Spring Cloud、Dubbo 等流行框架的无缝集成Nacos 为构建云原生和微服务架构提供了一整套简单而全面的解决方案。
二、启动Nacos
下面我们来启动Naocs。启动Nacos前我们在官网下载Nacos压缩包截至文章发布时Nacos的最新版是2.5.0我们就使用这个版本来简单的讲解Nacos。 使用前需确保开发环境符合Nacos最低运行要求:
环境配置JDK/JRE8及以上CPU1核及以上支持64位CPU内存2G及以上硬盘无最小要求根据保留日志自行调整操作系统Linux, Mac OS X, Windows TipNacos 2.50下载地址 https://download.nacos.io/nacos-server/nacos-server-2.5.0.zip?spm5238cd80.2ef5001f.0.0.3f613b7cP0VdIafilenacos-server-2.5.0.zip 2.1 Windows 启动Nacos
在 Windows 环境下进入解压后的目录中找到 bin 文件夹。在该目录下通过双击或在命令行中执行 startup.cmd 脚本建议使用命令行执行脚本如果使用命令行执行脚本需附加参数“-m standalone”来启动 Nacos 的单机模式这时 Nacos 会在默认的 8848 端口启动服务启动成功后你可以通过浏览器访问 http://localhost:8848/nacos 进行管理和配置。需要注意的是启动前必须确保系统中已正确配置 JDK 环境变量以便 Nacos 能够正常运行。
2.2 Linux 启动Nacos
在 Linux 系统上启动 Nacos 的流程与 Windows 类似进入解压后的目录找到 bin 目录。为了在 Linux 环境下运行脚本首先确认 startup.sh 文件具有可执行权限如果没有可通过命令 chmod x startup.sh 进行赋权。接下来在终端中执行sh startup.sh -m standalone命令即可启动 Nacos 的单机模式。启动完成后Nacos 同样会监听默认的 8848 端口我们可以通过浏览器访问管理界面。 Tip如果通过双击startup.cmd 启动Nacos会出现报错问题这是因为startup.cmd 中默认设置的是集群模式运行需要将文件中的MODEcluster 改为MODEstandalone再次双击运行既可。 2.3 开启鉴权
一般情况下我们在开发时不需要开启鉴权但是有必要在这里说一下如何开启鉴权。进入Nacos目录下的conf目录修改application.properties文件。 首先我们需要配置自定义的用于生成JWT令牌的密钥自定义密钥时推荐将配置项设置为Base64编码的字符串且原始密钥长度不得低于32字符
nacos.core.auth.default.token.secret.key生成JWT令牌的密钥接着配置用于服务端之间请求的身份识别信息
nacos.core.auth.server.identity.key服务器身份验证的键
nacos.core.auth.server.identity.value服务器身份验证的值最后我i们就可以开启鉴权了
# 使用哪种认证机制来进行身份验证和授权
nacos.core.auth.system.typenacos
# 启用身份认证
nacos.core.auth.enabledtrueTipNacos 的认证类型分为内置认证nacos、OAuth2认证oauth2以及自定义认证custom 三、使用Nacos
3.1 服务注册与发现 什么是服务注册与发现 服务发现和注册是微服务架构中的关键机制用于动态管理和协调服务实例之间的通信。服务注册涉及将服务实例的信息如名称、地址、端口注册到一个服务注册中心。服务实例在启动时会向注册中心注册并定期发送心跳信号以保持注册状态。 服务发现则是指客户端或其他服务通过服务注册中心查找和访问服务实例的过程。服务发现有两种主要模式客户端发现和服务端发现。在客户端发现模式中客户端直接与注册中心通信获取服务实例信息在服务端发现模式中负载均衡器或API网关负责从注册中心获取服务信息并转发请求。 这两者的结合实现了服务的动态扩展和高可用性简化了微服务之间的通信配置是构建大规模分布式系统的重要机制。 项目中使用服务发现与注册 实现服务注册与发现我们需要在项目中安装nacos-sdk-csharp.aspnetcore。 首先我们新建项目 NacosDemo在项目中增加两个Web Api 服务GoodsApi 和OrderApi在这个项目中引入nacos-sdk-csharp.aspnetcore。 Tip注意不要安装带unoffical的nuget包带unoffical包支支持Nacos 1.x。 接着在Program 类中新增服务注册的代码。 // 将服务注册到nacos
builder.Services.AddNacosAspNet(builder.Configuration);然后我们需要在application.json文件中配置Nacos 服务发现。 Nacos: {ServerAddresses: [http://192.168.116.1:8848],Namespace: learning,ServiceName: GoodsApi,GroupName: DEFAULT_GROUP,ClusterName: DEFAULT,Weight: 100,Metadata: {version: 1.0.0},username: nacos,password: nacos,RegisterEnabled: true,InstanceEnabled: true,Ephemeral: true
}这个Nacos配置文件包含了服务注册和发现的详细信息。ServerAddresses是Nacos服务器的地址列表Namespace表示服务所在的命名空间这里命名为learning。ServiceName是注册服务的名称GroupName是服务所属的分组默认是DEFAULT_GROUP。ClusterName是服务所属的集群名称默认是DEFAULT。Weight表示服务实例的权重用于负载均衡这里设置为100。Metadata包含服务实例的元数据版本信息为1.0.0。username和password是访问Nacos服务器的认证信息。RegisterEnabled表示是否启用服务注册InstanceEnabled表示服务实例是否可用Ephemeral表示服务实例是否为临时实例非持久。 在配置中我们将服务设置为了临时实例这里所说的临时实例是指在服务注册和发现系统中注册中心不会持久化存储的服务实例。这种实例的信息不会被持久化存储在注册中心的数据库中当服务实例失效或停止时注册中心会自动删除该实例的信息不会保留历史记录。临时实例适用于生命周期较短的服务实例例如短期运行的批处理任务或临时性服务。如果临时实例在规定时间内未发送心跳信号注册中心会自动将其移除确保注册中心只保留当前活跃的服务实例避免无效实例占用资源。临时实例适用于需要快速启动和停止的服务场景例如容器化应用的实例管理支持快速扩展和收缩服务实例数量。 在上述Nacos配置中我们设置服务的权重为100这个权重是用于服务实例负载均衡的重要参数。它决定了请求在多个服务实例之间的分配比例。具体来说权重值越高的实例被选择处理请求的概率就越大。通过设置不同的权重值可以实现对服务实例的流量控制优化系统性能和资源利用。里如在微服务架构下如果某个服务实例的硬件配置较高处理能力较强可以将其权重设置得更高以便更多的请求能够分配到该实例从而提高整体系统的效率。相反如果某个实例的资源较为有限则可以降低其权重减少其负载压力。 我们还需要在Nacos中新增命名空间也就是配置中的Namespace。我们访问Nacos的管理界面切换到命名空间界面新增命名空间。 接下来我们在GoodsApi 和OrderApi两个Web Api服务中增加控制器GoodsController 和OrderController 在这两个接口新增用来获取商品GetGoods和获取订单GetOrder的Action。其中GetGoods返回服务的Ip、端口号以及商品名GetOrder通过服务发现调用GoodsApi的GetGoods接口并返回数据。这个流程模拟了订单获取商品信息的流程很简单但能展示了Nacos服务发现的能力。 using Microsoft.AspNetCore.Mvc;namespace GoodsApi.Controllers
{[Route(api/[controller])][ApiController]public class GoodsController : ControllerBase{[HttpGet][Route(GetGoods)]public string GetGoods(){// 获取服务ip和端口var ip HttpContext.Connection.LocalIpAddress.MapToIPv4().ToString();var port HttpContext.Connection.LocalPort;return Goods Service服务地址 ip : port商品列表苹果、香蕉、橘子;}}
}using Microsoft.AspNetCore.Mvc;
using Nacos.V2;namespace OrderApi.Controllers;[ApiController]
[Route([controller])]
public class OrderController : ControllerBase
{private readonly INacosNamingService _nacosNamingService;public OrderController(INacosNamingService nacosNamingService){_nacosNamingService nacosNamingService;}[HttpGet][Route(GetOrder)]public string GetOrder(){var instance _nacosNamingService.SelectOneHealthyInstance(GoodsApi).Result;if (instance!null){// 调用GetGoods方法HttpClient client new HttpClient();var response client.GetAsync($http://{instance.Ip}:{instance.Port}/api/Goods/GetGoods).Result;return $Order Service,调用GoodsApi服务成功,调用GetGoods方法返回数据{response.Content.ReadAsStringAsync().Result};}else{return Order Service,调用GoodsApi服务失败;}}
}紧接着我们启动项目调试代码。进入GohodsApi紧接着我们启动项目调试代码。进入GoodsApi 接口项目的bin目录开启两个命令窗口分别执行运行命令指定不同的端口。同样在OrderApi接口项目的bin目录中执行运行命令。 dotnet .\GoodsApi.dll --urlshttp://localhost:5001/
dotnet .\GoodsApi.dll --urlshttp://localhost:5002/
dotnet .\OrderApi.dll --urlshttp://localhost:5003/执行上述命令后我们查看Nacos管理界面的服务列表会看到两个GoodsApi服务和一个OrderApi服务。 最后我们访问在浏览器中访问http://localhost:5003/order/GetOrder会看到浏览器显示出了GetOrder中返回的内容其中包含了GoodsApi中GetGoods返回的内容。我们多刷新几次会发现页面显示的GoodsApi的地址在改变这说明Nacos 服务发现起了作用。
3.2 配置中心
什么是配置中心 在以往的开发中我们往往需要将数据库连接字符串这类的配置信息放在application.json文件中这对于单体应用或服务数量不是很多的微服务应用来说没什么大问题如果配置需要更新了我们就直接去服务器上修改就可以但是对于大型微服务应用来说将配置信息放在application.json中就显得很鸡肋了每次修改配置信息去服务器上一个服务一个服务改的话是很麻烦的而且还容易出错。这时我们就需要引入配置中心配置中心是一种集中管理和分发应用配置的系统。它能够将配置从应用程序代码中分离出来方便管理和修改。配置中心通常支持动态更新配置不需要重启服务即可生效并保障配置的一致性和可靠性。Nacos 就具备配置中心的功能。项目中使用配置中心 首先我们需要在项目中引入Nacos 配置中心的nuget包nacos-sdk-csharp.extensions.configuration这个包可以帮我们去监听配置的变化。 其次为了演示配置中心的使用我们在Nacos管理界面的配置页面新增一个数据库配置GoodsDb。 接着我们在GoodsApi项目的application.json文件的Nacos节点下增加需要监听的配置。Listeners: [{Optional:false,DataId:GoodsDb,Group:GoodsGroup}
]这个配置表示一个监听器列表包含一个监听器对象Listeners表示配置监听器的数组Optional表示监听器是否可选false表示必需DataId表示监听的配置项ID这里是GoodsDbGroup表示配置项所属的组这里是GoodsGroup这个监听器用于监控GoodsGroup组中GoodsDb配置项的变化。 然后我们在GoodsApi项目中新增一个控制器DbTestController并在其中编写GetDbConnectionString Action这个Action中支是回去了数据库连接字符串并将这个字符串返回给调用方。using Microsoft.AspNetCore.Mvc;namespace GoodsApi.Controllers;[ApiController]
[Route([controller])]
public class DbTestController : ControllerBase
{/// summary/// 配置/// /summaryprivate IConfiguration _configuration;public DbTestController(IConfiguration configuration){_configuration configuration;}/// summary/// 获取/// /summary/// returns/returns[HttpGet][Route(GetDbConnectionString)]public string GetDbConnectionString(){// 从配置中获取数据库连接字符串return _configuration.GetConnectionString(GoodsDb);}
} 最后我们在浏览器中输入http://localhost:5001/dbtest/GetDbConnectionString即可看到我们在Nacos中配置的数据库链接字符串。这是我们修改Nacos中配置的链接字符串再次刷新页面显示的连接字符串改变了。 TIP像数据库连接字符串这种在项目启动时就注入进来的配置如果Nacos对应的配置修改后虽然会自动更新到项目中但是我们的项目使用的链接字符串还是在启动时注入进来的旧的连接字符串因此我们需要自己实现更新注入的连接字符串的代码。由于专栏不是专门讲Naocs的因此在这里就不再讲解如何实现了。
四、总结
本文详细介绍了 Nacos 的概念、安装启动和使用方法全面展示了 Nacos 在微服务架构中的重要作用。文章首先指出Nacos 是阿里巴巴开源的云原生应用基础设施通过自动注册和服务发现机制使各服务实例能够动态注册、查询并健康检查从而提升系统的稳定性和可靠性同时其集中化的配置管理平台能够让应用在运行时动态更新配置彻底解决了硬编码或手动修改分布式文件所带来的维护困难和运维成本高的问题并能与 Kubernetes、Spring Cloud、Dubbo 等流行框架无缝集成。接着文章介绍了如何获取最新版 Nacos以 2.5.0 为例并列举了启动前的系统环境要求包括 JDK 8 及以上、1 核 CPU、2G 内存等详细说明了在 Windows 和 Linux 环境下分别如何通过命令行或脚本启动 Nacos 的单机模式以及如何在启动脚本中调整模式设置。文章还讲解了如何开启鉴权通过修改配置文件设定 JWT 密钥和服务间身份验证参数保障访问安全。随后文中通过一个基于 C# 的示例展示了如何在项目中使用 Nacos 实现服务注册与发现说明了服务如何通过注册中心实现自动注册、权重路由和负载均衡从而支持客户端动态调用其他服务同时也介绍了如何利用 Nacos 配置中心实现配置的动态管理通过配置监听机制使得应用能够实时感知配置变化并更新数据库连接等关键参数。总体来说文章系统地阐释了 Nacos 如何以简洁而高效的方式实现服务治理与动态配置管理帮助开发者降低微服务运维复杂度构建更加稳定、弹性和高效的云原生系统。 文章转载自: http://www.morning.nkllb.cn.gov.cn.nkllb.cn http://www.morning.sqqhd.cn.gov.cn.sqqhd.cn http://www.morning.wmcng.cn.gov.cn.wmcng.cn http://www.morning.pmjw.cn.gov.cn.pmjw.cn http://www.morning.gcfrt.cn.gov.cn.gcfrt.cn http://www.morning.hwhnx.cn.gov.cn.hwhnx.cn http://www.morning.gnlyq.cn.gov.cn.gnlyq.cn http://www.morning.qtsks.cn.gov.cn.qtsks.cn http://www.morning.ey3h2d.cn.gov.cn.ey3h2d.cn http://www.morning.hxcuvg.cn.gov.cn.hxcuvg.cn http://www.morning.tbknh.cn.gov.cn.tbknh.cn http://www.morning.ltksw.cn.gov.cn.ltksw.cn http://www.morning.sgqw.cn.gov.cn.sgqw.cn http://www.morning.xqkjp.cn.gov.cn.xqkjp.cn http://www.morning.fthcn.cn.gov.cn.fthcn.cn http://www.morning.pcxgj.cn.gov.cn.pcxgj.cn http://www.morning.wfyzs.cn.gov.cn.wfyzs.cn http://www.morning.nbgfz.cn.gov.cn.nbgfz.cn http://www.morning.yghlr.cn.gov.cn.yghlr.cn http://www.morning.hpxxq.cn.gov.cn.hpxxq.cn http://www.morning.tlyms.cn.gov.cn.tlyms.cn http://www.morning.kcbml.cn.gov.cn.kcbml.cn http://www.morning.rtspr.cn.gov.cn.rtspr.cn http://www.morning.c-ae.cn.gov.cn.c-ae.cn http://www.morning.ctpfq.cn.gov.cn.ctpfq.cn http://www.morning.fqmbt.cn.gov.cn.fqmbt.cn http://www.morning.nfbxgtj.com.gov.cn.nfbxgtj.com http://www.morning.rkjz.cn.gov.cn.rkjz.cn http://www.morning.qcslh.cn.gov.cn.qcslh.cn http://www.morning.fgtls.cn.gov.cn.fgtls.cn http://www.morning.nkkr.cn.gov.cn.nkkr.cn http://www.morning.bbyqz.cn.gov.cn.bbyqz.cn http://www.morning.dblfl.cn.gov.cn.dblfl.cn http://www.morning.xckdn.cn.gov.cn.xckdn.cn http://www.morning.yrmgh.cn.gov.cn.yrmgh.cn http://www.morning.mhcys.cn.gov.cn.mhcys.cn http://www.morning.lfqnk.cn.gov.cn.lfqnk.cn http://www.morning.zrdqz.cn.gov.cn.zrdqz.cn http://www.morning.wtsr.cn.gov.cn.wtsr.cn http://www.morning.mmjqk.cn.gov.cn.mmjqk.cn http://www.morning.clndl.cn.gov.cn.clndl.cn http://www.morning.zmtrk.cn.gov.cn.zmtrk.cn http://www.morning.lbrwm.cn.gov.cn.lbrwm.cn http://www.morning.mxftp.com.gov.cn.mxftp.com http://www.morning.flchj.cn.gov.cn.flchj.cn http://www.morning.mtmph.cn.gov.cn.mtmph.cn http://www.morning.tpyjr.cn.gov.cn.tpyjr.cn http://www.morning.qxlgt.cn.gov.cn.qxlgt.cn http://www.morning.trfrl.cn.gov.cn.trfrl.cn http://www.morning.fbmrz.cn.gov.cn.fbmrz.cn http://www.morning.ljcf.cn.gov.cn.ljcf.cn http://www.morning.zxhhy.cn.gov.cn.zxhhy.cn http://www.morning.ltkms.cn.gov.cn.ltkms.cn http://www.morning.qkgwx.cn.gov.cn.qkgwx.cn http://www.morning.bzqnp.cn.gov.cn.bzqnp.cn http://www.morning.rjbb.cn.gov.cn.rjbb.cn http://www.morning.tktyh.cn.gov.cn.tktyh.cn http://www.morning.kjnfs.cn.gov.cn.kjnfs.cn http://www.morning.rykn.cn.gov.cn.rykn.cn http://www.morning.bsrcr.cn.gov.cn.bsrcr.cn http://www.morning.jjnry.cn.gov.cn.jjnry.cn http://www.morning.rbkl.cn.gov.cn.rbkl.cn http://www.morning.dnphd.cn.gov.cn.dnphd.cn http://www.morning.srgwr.cn.gov.cn.srgwr.cn http://www.morning.zlgbx.cn.gov.cn.zlgbx.cn http://www.morning.zgdnd.cn.gov.cn.zgdnd.cn http://www.morning.jqsyp.cn.gov.cn.jqsyp.cn http://www.morning.hyryq.cn.gov.cn.hyryq.cn http://www.morning.ndmh.cn.gov.cn.ndmh.cn http://www.morning.feites.com.gov.cn.feites.com http://www.morning.fqklt.cn.gov.cn.fqklt.cn http://www.morning.trfrl.cn.gov.cn.trfrl.cn http://www.morning.txhls.cn.gov.cn.txhls.cn http://www.morning.qxljc.cn.gov.cn.qxljc.cn http://www.morning.zrpbf.cn.gov.cn.zrpbf.cn http://www.morning.nxnrt.cn.gov.cn.nxnrt.cn http://www.morning.ljxps.cn.gov.cn.ljxps.cn http://www.morning.hfxks.cn.gov.cn.hfxks.cn http://www.morning.xpwdf.cn.gov.cn.xpwdf.cn http://www.morning.tzrmp.cn.gov.cn.tzrmp.cn