理解consul net.core 服务发现 服务调用

.Net Core服务治理Consul自动扩展和服务调用

.NET Core微服务实施之Consul服务发现与治理

服务注册

using Consul;
using System;

namespace TestConsul
{
    internal class Program
    {
        static void Main(string[] args)
        {
            var consulClient = new ConsulClient(c =>
            {
                    //consul地址
                    c.Address = new Uri("http://localhost:8500");
            });

            var registration = new AgentServiceRegistration()
            {
                ID = Guid.NewGuid().ToString(),//服务实例唯一标识
                Name = "TestService",//服务名
                Address = "localhost", //服务IP
                Port = 5002,//服务端口
								Check = new AgentServiceCheck()
                {
                    DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(5),//服务启动多久后注册
                    Interval = TimeSpan.FromSeconds(10),//健康检查时间间隔
                    HTTP = $"http://localhost:5002/health",//健康检查地址
                    Timeout = TimeSpan.FromSeconds(5)//超时时间
                }
            };

            //服务注册
            consulClient.Agent.ServiceRegister(registration).Wait();
            
            //应用程序终止时,取消注册
            consulClient.Agent.ServiceDeregister(registration.ID).Wait();
            Console.WriteLine("结束了");
        }
    }
}

服务获取

 //取在Consul注册的全部服务
var services = consul.Agent.Services().Result.Response;
foreach (var s in services.Values)
{
		Console.WriteLine($"ID={s.ID},Service={s.Service},Addr={s.Address},Port={s.Port}");
}

服务调用

//向服务发送请求
using (var httpClient = new HttpClient())
using (var httpContent = new StringContent("{phoneNum:'119',msg:'help me'}", Encoding.UTF8, "application/json"))
{
        var result = httpClient.PostAsync($"http://{s.Address}:{s.Port}/api/SMS/Send_LX", httpContent);
        Console.WriteLine($"调用{s.Service},状态:{result.Result.StatusCode}");
}

之前我以为consul的服务调用可以象wcf那样可以自动解析出类型名称和入参和返回参数的类型信息,测试是没有,consul只是保存了Address和Port,所有这个启动的服务下面的接口,还是需要一个一个去查看API文档调用的。 所以它起到的主要功能,就是服务的自动发现和扩容(启动多个实例,动态调用某一个实现负载平衡)


作者:spike

分类: Net

创作时间:2023-06-25

更新时间:2024-12-09

联系方式放在中括号之中例如[[email protected]],回复评论在开头加上标号例如:#1