在C# WebApi 中使用 Nacos02: 配置管理、服务管理实战

一、配置管理

1.添加一个新的命名空间

这里我都填写为publicdemo

2.C#代码配置启动

appsetting.json加上:

(nacos默认是8848端口)

  "NacosConfig": {"ServerAddresses": [ "http://localhost:8848" ], // Nacos 服务器地址"Namespace": "publicdemo" // 命名空间}

startup.cs加上(方式一和方式二任选):

public void ConfigureServices(IServiceCollection services)
{services.AddControllers();// 加载 Nacos 配置,启用 Nacos 服务发现//方式一: 需要先在appsetting.json中配置好services.AddNacosV2Config(Configuration, null, "NacosConfig");services.AddNacosV2Naming(Configuration, null, "NacosConfig");//方式二:直接将配置写在这里//services.AddNacosV2Config(x =>//{//    x.ServerAddresses = new System.Collections.Generic.List<string> { "http://localhost:8848/" };//    x.EndPoint = "";//    x.Namespace = "publicdemo";//});//services.AddNacosV2Naming(x =>//{//    x.ServerAddresses = new System.Collections.Generic.List<string> { "http://localhost:8848/" };//    x.EndPoint = "";//    x.Namespace = "publicdemo";//});
}

3.C#WebApi接口实现配置增加/查询/删除

这里设置我们的dataId、group、value!

namespace WebApplication1.Controllers
{[ApiController][Route("[controller]")]public class Demo{private readonly INacosConfigService _ns;public Demo(INacosConfigService ns){_ns = ns;}[HttpPost][Route(nameof(PublishConfig))]public  async Task<string> PublishConfig(INacosConfigService svc){var dataId = "demo-dateid";var group = "demo-group";var val = "test-value-" + DateTimeOffset.Now.ToString();await Task.Delay(500);var flag = await svc.PublishConfig(dataId, group, val);return $"发布配置结果,{flag}";}[HttpPost][Route(nameof(GetConfig))]public  async Task<string> GetConfig(INacosConfigService svc){var dataId = "demo-dateid";var group = "demo-group";await Task.Delay(500);var config = await svc.GetConfig(dataId, group, 5000L);return $"获取配置结果,{config}";}[HttpPost][Route(nameof(RemoveConfig))]public  async Task<string> RemoveConfig(INacosConfigService svc){var dataId = "demo-dateid";var group = "demo-group";await Task.Delay(500);var flag = await svc.RemoveConfig(dataId, group);return $"删除配置结果,{flag}";}/// <summary>/// 测试/// </summary>/// <returns></returns>[HttpPost][Route(nameof(GetInfoListAsync))]public async Task GetInfoListAsync(){await PublishConfig(_ns);await GetConfig(_ns);await RemoveConfig(_ns);}}
}

4.结果检验

选择正确的命名空间 

找到我们的DataId,点击详情 

 5.操作总结

若需要还原为旧的配置,可在【历史版本】-【回滚】中操作 

6.补充说明

1.用WebAPI增删改后,不重启情况下,可以利用WebAPI或UI界面查到最新数据
2.用UI界面增删改后,不重启情况下,可以利用WebAPI或UI界面查到最新数据

二、服务管理

1.服务的注册、查询、注销

    [ApiController][Route("[controller]")]public class Demo{private readonly INacosConfigService _ns;public Demo(INacosConfigService ns){_ns = ns;}[HttpPost][Route(nameof(RegisterInstance))]public async Task<string> RegisterInstance(INacosNamingService svc, int port = 9999){await Task.Delay(500);var instace = new Nacos.V2.Naming.Dtos.Instance{ServiceName = "demo-svc1",ClusterName = Nacos.V2.Common.Constants.DEFAULT_CLUSTER_NAME,Ip = "127.0.0.1",Port = port,Enabled = true,Ephemeral = true,Healthy = true,Weight = 100,InstanceId = $"demo-svc1-127.0.0.1-{port}",Metadata = new System.Collections.Generic.Dictionary<string, string>{{ "m1", "v1" },{ "m2", "v2" },}};// 注册实例有很多重载,选适合自己的即可。await svc.RegisterInstance("demo-svc1", "DEFAULT_GROUP", instace);return $"注册实例成功";}[HttpPost][Route(nameof(GetAllInstances))]public async Task<string> GetAllInstances(INacosNamingService svc){await Task.Delay(500);// 获取全部实例有很多重载,选适合自己的即可。最后一个参数表明要不要订阅这个服务// SelectInstances, SelectOneHealthyInstance 是另外的方法可以获取服务信息。var list = await svc.GetAllInstances("demo-svc1", "DEFAULT_GROUP", false);return $"获取实例成功,{Newtonsoft.Json.JsonConvert.SerializeObject(list)}";}[HttpPost][Route(nameof(DeregisterInstance))]public async Task<string> DeregisterInstance(INacosNamingService svc){await Task.Delay(500);// 注销实例有很多重载,选适合自己的即可。await svc.DeregisterInstance("demo-svc1", "DEFAULT_GROUP", "127.0.0.1", 9999);return $"注销实例成功";}}

2.UI查询结果

3.功能效果

        如果 WebAPI 宕机了,Nacos 会根据健康检查机制检测到该服务实例不可用,并将其从注册列表中移除。

4.自动注册

        自动注册避免每次启动都需人工调用接口,提升服务管理效率,保证高可用性与灵活扩展,降低运维成本。

public class Startup
{public Startup(IConfiguration configuration){Configuration = configuration;}public IConfiguration Configuration { get; }// This method gets called by the runtime. Use this method to add services to the container.public void ConfigureServices(IServiceCollection services){services.AddControllers();services.AddNacosV2Config(Configuration, null, "NacosConfig");services.AddNacosV2Naming(Configuration, null, "NacosConfig");}// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.public void Configure(IApplicationBuilder app, IWebHostEnvironment env){if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}NacosAutoRegister(app);//增加这个方法app.UseRouting();app.UseAuthorization();app.UseEndpoints(endpoints =>{endpoints.MapControllers();});}// 在应用启动时自动注册实例private void NacosAutoRegister(IApplicationBuilder app){var svc = app.ApplicationServices.GetRequiredService<INacosNamingService>();//获取服务var port = 9999;var instance = new Instance{ServiceName = "demo-svc1",ClusterName = Nacos.V2.Common.Constants.DEFAULT_CLUSTER_NAME,Ip = "127.0.0.1",Port = port,Enabled = true,Ephemeral = true,Healthy = true,Weight = 100,InstanceId = $"demo-svc1-127.0.0.1-{port}",Metadata = new Dictionary<string, string>{{ "m1", "v1" },{ "m2", "v2" }}};// 服务调用,自动注册实例svc.RegisterInstance("demo-svc1", "DEFAULT_GROUP", instance).Wait();}
}

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

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

相关文章

如何搭建spark yarn 模式的集群集群。

下载 App 如何搭建spark yarn 模式的集群集群。 搭建Spark on YARN集群的详细步骤 Spark on YARN模式允许Spark作业在Hadoop YARN资源管理器上运行&#xff0c;利用YARN进行资源调度。以下是搭建步骤&#xff1a; 一、前提条件 已安装并配置好的Hadoop集群&#xff08;包括HDF…

C++--入门基础

C入门基础 1. C的第一个程序 C继承C语言许多大多数的语法&#xff0c;所以以C语言实现的hello world也可以运行&#xff0c;C中需要把文件定义为.cpp&#xff0c;vs编译器看是.cpp就会调用C编译器编译&#xff0c;linux下要用g编译&#xff0c;不再是gcc。 // test.cpp #inc…

从实列中学习linux shell9 如何确认 服务器反应迟钝是因为cpu还是 硬盘io 到底是那个程序引起的。cpu负载多高算高

在 Linux 系统中,Load Average(平均负载) 是衡量系统整体压力的关键指标,但它本身没有绝对的“高/低”阈值,需要结合 CPU 核心数 和 其他性能指标 综合分析。以下是具体判断方法: 一、Load Average 的基本含义 定义:Load Average 表示 单位时间内处于可运行状态(R)和不…

聊一聊接口测试更侧重于哪方面的验证

目录 一、功能性验证 输入与输出正确性 参数校验 业务逻辑覆盖 二、数据一致性验证 数据格式规范 数据完整性 数据类型与范围 三、异常场景验证 容错能力测试 边界条件覆盖 错误码与信息清晰度 四、安全与权限验证 身份认证 数据安全 防攻击能力 五、性能与可…

Fiddler抓取APP端,HTTPS报错全解析及解决方案(一篇解决常见问题)

环境&#xff1a;雷电模拟器Android9系统 ​ 你所遇到的fiddler中抓取HTTPS的问题可以分为三类&#xff1a;一类是你自己证书安装上逻辑错误&#xff0c;另一种是APP中使用了“证书固定”的手段。三类fiddler中生成证书时的参数过程。 1.Fiddler证书安装上的逻辑错误 更新Opt…

OpenGL-ES 学习(15) ----纹理

目录 纹理简介纹理映射纹理映射流程示例代码&#xff1a;纹理的环绕和过滤方式纹理的过滤方式 纹理简介 现实生活中&#xff0c;纹理(Texture) 类似于游戏中皮肤的概念&#xff0c;最通常的作用是装饰 3D 物体&#xff0c;它像贴纸一样贴在物体的表面&#xff0c;丰富物体的表…

OpenCV计算机视觉实战(2)——环境搭建与OpenCV简介

OpenCV计算机视觉实战&#xff08;2&#xff09;——环境搭建与OpenCV简介 0. 前言1. OpenCV 安装与配置1.1 安装 Python-OpenCV1.2 配置开发环境 2. OpenCV 基础2.1 图像读取与显示2.2 图像保存 3. 摄像头实时捕获小结系列链接 0. 前言 OpenCV (Open Source Computer Vision …

ubuntu22.04安装显卡驱动与cuda+cuDNN

背景&#xff1a; 紧接前文&#xff1a;Proxmox VE 8.4 显卡直通完整指南&#xff1a;NVIDIA 2080 Ti 实战。在R740服务器完成了proxmox的安装&#xff0c;并且安装了一张2080ti 魔改22g显存的的显卡。配置完了proxmox显卡直通&#xff0c;并将显卡挂载到了vm 301&#xff08;…

A2A Python 教程 - 综合指南

目录 • 介绍• 设置环境• 创建项目• 代理技能• 代理卡片• A2A服务器• 与A2A服务器交互• 添加代理功能• 使用本地Ollama模型• 后续步骤 介绍 在本教程中&#xff0c;您将使用Python构建一个简单的echo A2A服务器。这个基础实现将向您展示A2A提供的所有功能。完成本教…

MySQL基础关键_005_DQL(四)

目 录 一、分组函数 1.说明 2.max/min 3.sum/avg/count 二、分组查询 1.说明 2.实例 &#xff08;1&#xff09;查询岗位和平均薪资 &#xff08;2&#xff09;查询每个部门编号的不同岗位的最低薪资 3.having &#xff08;1&#xff09;说明 &#xff08;2&#xff…

GAMES202-高质量实时渲染(Assignment 2)

目录 作业介绍环境光贴图预计算传输项的预计算Diffuse unshadowedDiffuse shadowedDiffuse Inter-reflection(bonus) 实时球谐光照计算 GitHub主页&#xff1a;https://github.com/sdpyy1 作业实现:https://github.com/sdpyy1/CppLearn/tree/main/games202 作业介绍 物体在不同…

2025年- H21-Lc129-160. 相交链表(链表)---java版

1.题目描述 2.思路 当pa&#xff01;pb的时候&#xff0c;执行pa不为空&#xff0c;遍历pa链表。执行pb不为空&#xff0c;遍历pb链表。 3.代码实现 // 单链表节点定义 class ListNode {int val;ListNode next;ListNode(int x){valx;nextnull;}}public class H160 {// 主方法…

win10系统安卓开发环境搭建

一 安装jdk 下载jdk17 ,下载路径:https://download.oracle.com/java/17/archive/jdk-17.0.12_windows-x64_bin.exe 下载完毕后,按照提示一步步完成,然后接着创建环境变量, 在cmd控制台输入java -version 验证: 有上面的输出代表jdk安装并配置成功。 二 安装Android stu…

【算法基础】选择排序算法 - JAVA

一、算法基础 1.1 什么是选择排序 选择排序是一种简单直观的排序算法&#xff0c;它的工作原理是&#xff1a;首先在未排序序列中找到最小&#xff08;或最大&#xff09;元素&#xff0c;存放到排序序列的起始位置&#xff0c;然后再从剩余未排序元素中继续寻找最小&#xf…

LabVIEW异步调用VI介绍

在 LabVIEW 编程环境里&#xff0c;借助结合异步 VI 调用&#xff0c;并使用 “Open VI Reference” 函数上的 “Enable simultaneous calls on reentrant VIs” 选项&#xff08;0x40&#xff09;&#xff0c;达成了对多个 VI 调用执行效率的优化。以下将从多方面详细介绍该 V…

Leetcode刷题 | Day50_图论02_岛屿问题01_dfs两种方法+bfs一种方法

一、学习任务 99. 岛屿数量_深搜dfs代码随想录99. 岛屿数量_广搜bfs100. 岛屿的最大面积101. 孤岛的总面积 第一类DFS&#xff08;主函数中处理第一个节点&#xff0c;DFS处理相连节点&#xff09;&#xff1a; 主函数中先将起始节点标记为已访问DFS函数中不处理起始节点&…

深入理解网络安全中的加密技术

1 引言 在当今数字化的世界中&#xff0c;网络安全已经成为个人隐私保护、企业数据安全乃至国家安全的重要组成部分。随着网络攻击的复杂性和频率不断增加&#xff0c;保护敏感信息不被未授权访问变得尤为关键。加密技术作为保障信息安全的核心手段&#xff0c;通过将信息转换为…

旧版本NotionNext图片失效最小改动解决思路

旧版本NotionNext图片失效最小改动解决思路 契机 好久没写博客了&#xff0c;最近在notion写博客的时候发现用notionNext同步到个人网站时&#xff0c;图片无法预览。猜测是notion加了防盗链措施&#xff0c;去notionNext官方github上寻找解决方案&#xff0c;需要升级到4.8.…

深度学习笔记40_中文文本分类-Pytorch实现

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 一、我的环境 1.语言环境&#xff1a;Python 3.8 2.编译器&#xff1a;Pycharm 3.深度学习环境&#xff1a; torch1.12.1cu113torchvision…