C#-使用Consul

简介: Consul是一个服务网格解决方案,提供了一个功能齐全的控制平面,具有服务发现、配置和分段功能。

Consul是一个服务网格解决方案,提供了一个功能齐全的控制平面,具有服务发现、配置和分段功能。

下载安装Consul,直接去官网(Consul by HashiCorp)下载即可。

启动Consul,访问consul主页,默认为http://localhost:8500。

#开发模式启动consul agent -dev


将服务注册到Consul,首先需要下载consul的nuget包,在包管理器中,搜索consul进行安装,使用扩展方法封装一个通用的注册方法:

//ConsulRegistryExtensions.csusingConsul;
usingMicrosoft.AspNetCore.Builder;
usingMicrosoft.Extensions.Configuration;
usingMicrosoft.Extensions.Hosting;
namespaceConsulHelper{
publicstaticclassConsulRegistryExtensions    {
publicstaticIApplicationBuilderUseConul(thisIApplicationBuilderapplicationBuilder, IConfigurationconfiguration, IHostApplicationLifetimelifetime) 
        {
try            {
stringip=configuration["Consul:Ip"];
intport=Convert.ToInt32(configuration["Consul:Port"]);
stringserviceName=configuration["Consul:ServiceName"];
varserviceId=Guid.NewGuid().ToString();
varconsulHost=configuration["Consul:ConsulHost"];
varconsulDataCenter=configuration["Consul:ConsulDataCenter"];
//创建consul的连接对象varconsulClient=newConsulClient(c=>                {
c.Address=newUri(consulHost);
c.Datacenter=consulDataCenter;
                });
AgentServiceRegistrationagentServiceRegistration=newAgentServiceRegistration()
                {
ID=serviceId,
Name=serviceName,
Address=ip,
Port=port,
Check=newAgentServiceCheck()
                    {
Interval=TimeSpan.FromSeconds(10),
HTTP=$"http://{ip}:{port}/Api/ApiHealth",
Timeout=TimeSpan.FromSeconds(10),
DeregisterCriticalServiceAfter=TimeSpan.FromSeconds(20)
                    }
                };
//将服务注册到consul上consulClient.Agent.ServiceRegister(agentServiceRegistration).Wait();
//注销实例lifetime.ApplicationStopped.Register(async () =>                {
awaitconsulClient.Agent.ServiceDeregister(serviceId);
                });
            }
catch(Exceptionex)
            {
            }
returnapplicationBuilder;
        }
    }
}

配置文件中的参数配置:

"Consul": {
"Ip": "127.0.0.1",
"Port": "5272",
"ServiceName": "ContentService",
"ConsulHost": "http://127.0.0.1:8500",
"ConsulDataCenter": "dc1"  }

在WebApi项目的Controller文件夹中,创建心跳检测接口:

//ApiHealthController.csusingMicrosoft.AspNetCore.Mvc;
namespaceContentService.WebApi.Controllers{
    [Route("Api/[controller]")]
publicclassApiHealthController:Controller    {
        [HttpGet]
publicIActionResultGet()
        {
returnOk("ok");
        }
    }
}

在Program.cs中调用刚才我们写的扩展方法:

//服务注册到consul中IConfigurationconfiguration=app.Configuration;
IHostApplicationLifetimelifetime=app.Lifetime;
app.UseConul(configuration, lifetime);

启动服务,可以看到服务已经成功添加到Consul中了。

目录
相关文章
|
XML C# 数据格式
WPF技术之xmlns
在WPF中,xmlns是XML命名空间(XML Namespace)的缩写,用于引入不同的XML命名空间,以便在XAML文件中使用特定的命名空间中的元素、属性和类型。
1033 1
|
7月前
|
JavaScript C++ UED
Vue 路由跳转深度解析 $router.push VS location.href
本文深度剖析 Vue SPA 中 `this.$router.push()` 与 `window.location.href` 的本质差异:前者基于 Vue Router 实现无刷新导航,完整触发守卫、保持状态、支持懒加载;后者绕过框架导致刷新、丢状态、失效守卫。涵盖原理、源码、模式对比及最佳实践,助你写出高可用、高性能的路由逻辑。(239字)
199 2
|
前端开发 NoSQL Java
基于Spring Boot + Vue3的办公用品申领管理系统
这是一个基于Spring Boot和Vue3的办公用品申领系统,支持用户申请、管理员审批及库存管理等功能,技术涵盖JWT认证、Redis缓存与Element Plus组件库,提供完整的前后端解决方案。
484 1
基于Spring Boot + Vue3的办公用品申领管理系统
|
存储 安全 芯片
硬盘数据恢复—硬盘电路板损坏的数据恢复方案
硬盘故障: 硬盘电路板损坏。 硬盘电路板损坏的典型表现: 1、硬盘加电无任何反应。 2、硬盘电路芯片等模块损坏或缺失。
688 15
|
Web App开发 测试技术 API
使用Ollama和Botnow本地部署DeepSeek R1模型的对比分析
本文详细对比了使用Ollama和Botnow两种方式在本地运行DeepSeek R1等开源大模型的不同。通过Ollama,用户可以在个人电脑(如MacBook Pro)上快速部署和测试模型;而Botnow则提供了企业级的API接入和本地部署方案,支持更复杂的应用场景。具体步骤包括环境准备、模型下载与运行、图形化界面操作等,帮助用户选择最适合自己的方式体验大模型的强大功能。
1123 0
|
存储 NoSQL Redis
Redis从入门到精通之底层数据结构快表 - QuickList详解
Redis中的快表(QuickList)是一种特殊的数据结构,用于存储一系列的连续节点,每个节点可以是一个整数或一个字节数组。快表是Redis中的底层数据结构之一,常用于存储有序集合(Sorted Set)等数据类型的底层实现。在本文中,我们将深入了解Redis中的快表,包括快表的结构和操作等。
3285 125
Redis从入门到精通之底层数据结构快表 - QuickList详解
|
编解码 算法 数据挖掘
WoodYOLO:用于木材种类鉴定的YOLO改进版
【论文解读】WoodYOLO通过木材的显微图像发现木材的特征,可用于木材种类鉴定,性能优于通用的YOLO
484 7
|
供应链 数据挖掘 大数据
【客户案例】洋河股份:一块屏管理8000+ 经销商
江苏洋河酒厂股份有限公司(苏酒集团)是中国白酒行业领军企业。洋河积极进行数字化转型,通过构建数据驱动的管理体系,大幅提升运营效率和精准度,特别是在组织架构、费用管理和经销商评估等方面取得了显著成效。
919 3
.NET Core 服务注册步骤总结
.NET Core 服务注册步骤总结
434 0