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中了。

目录
打赏
0
0
0
0
7
分享
相关文章
微服务Consul集群搭建
Consul是HashiCorp的开源工具,用于服务发现、配置管理和分布式一致性。它提供服务注册与发现、健康检查、KV存储、多数据中心支持,并基于Raft协议保证一致性。Consul还具有DNS接口和Web UI。要安装,可从HashiCorp或阿里云下载,使用`yum`在Linux上安装。启动单机模式用`consul agent -dev`,集群部署涉及配置文件如`/etc/consul.d/consul.hcl`。常用命令包括启动、加入集群、查看成员及服务管理等。
微服务Consul集群搭建
阿里云 Elasticsearch Serverless 全新发布,平均可省50%成本
阿里云 Elasticsearch Serverless 全新发布,平均可省50%成本,致力于为用户打造更低成本、弹性灵活、开放兼容、开箱即用的云上 Elasticsearch 使用体验。
1369 0
字节一面:服务端挂了,客户端的 TCP 连接还在吗?
收到一位读者的私信,说字节面试有这么一个问题:服务端挂了,客户端的 TCP 连接会发生什么? 如果「服务端挂掉」指的是「服务端进程崩溃」,那么这个读者猜的想法是对的,服务端的进程在发生崩溃的时候,内核会发送 FIN 报文,与客户端进行四次挥手。 但是,如果「服务端挂掉」指的是「服务端主机宕机」,那么是不会发生四次挥手的,具体后续会发生什么?还要看客户端会不会发送数据? 如果客户端会发送数据,由于服务端已经不存在,客户端的数据报文会超时重传,当重传次数达到一定阈值后,会断开 TCP 连接; 如果客户端一直不会发送数据,再看客户端有没有开启 TCP keepalive 机制? 如果有开启,客
208 0
.net core工具组件系列之Autofac—— 第二篇:Autofac的3种依赖注入方式(构造函数注入、属性注入和方法注入),以及在过滤器里面实现依赖注入
本篇文章接前一篇,建议可以先看前篇文章,再看本文,会有更好的效果。前一篇跳转链接:https://www.cnblogs.com/weskynet/p/15046999.html
894 0
.net core工具组件系列之Autofac—— 第二篇:Autofac的3种依赖注入方式(构造函数注入、属性注入和方法注入),以及在过滤器里面实现依赖注入
完美解决 fatal: unable to access ‘https://github.com/Homebrew/brew/‘
完美解决 fatal: unable to access ‘https://github.com/Homebrew/brew/‘
1783 0
VScode将代码提交到远程服务器、同时解决每次提交都要输入密码的问题(这里以gitee为例子)
这篇文章介绍了如何在VSCode中将代码提交到Gitee远程服务器,并提供了解决每次提交都需要输入密码问题的方法。
VScode将代码提交到远程服务器、同时解决每次提交都要输入密码的问题(这里以gitee为例子)
docker 服务,镜像,容器命令总结
docker 服务,镜像,容器命令总结
260 4
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问