基于netcore的微服务——consul(1)
consul作用:
1.当请求从浏览器,请求web服务,会经过网关Ocelot,
2.然后访问,WebServer,然后WebServer需要访问restserver
3.通过consul找到可用的restconsul服务,
4.然后WebServer调用可用的restserver
一、创建实例项目
创建一个webapi项目 MsgService
二、部署consul
1.下载window版64位
2.安装
3.测试启动,执行命令
//在生产环境下使用
consul agent -dev
4.进入consul界面
http://localhost:8500
三、配置项目
1.MsgService配置
1.在API项目中创建health控制器
2.配置program.cs
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
//获取配置信息,通过命令行界面,在运行时动态的设置地址和路由
var config = new ConfigurationBuilder().AddCommandLine(args).Build();
//获得ip
String ip = config["ip"];
//获得端口号
String port = config["port"];
//通过获得的地址和端口号设置程序
webBuilder.UseStartup<Startup>().UseUrls($"http://{ip}:{port}");
});
3.配置startup类中的configure
//IHostApplicationLifetime appLifetime 通过这个参数注入对象
public void Configure(IApplicationBuilder app, IWebHostEnvironment env,IHostApplicationLifetime appLifetime)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
#region
//读取配置信息
string ip = Configuration["ip"];
string port = Configuration["port"];
//服务名
string serviceName = "MsgService";
//服务id
string serviceId = serviceName + Guid.NewGuid();
using (var consulClient = new ConsulClient(c =>
{
//consul的地址
c.Address = new Uri("http://127.0.0.1:8500");
c.Datacenter = "dc1";
}))
{
//注册服务到consul
consulClient.Agent.ServiceRegister(
new AgentServiceRegistration
{
Address = ip, //服务提供者的能被消费者访问的ip地址(可以被其他应用访问的地址,本地测试可用127.0.0.1,机房环境写自己内外ip)
Port = Convert.ToInt32(port),//服务提供者的能被消费者访问的端口
ID = serviceId,
Name = serviceName,
//健康检查
Check = new AgentServiceCheck()
{
DeregisterCriticalServiceAfter = TimeSpan.FromSeconds(5),//服务停止多久注销
HTTP = $"http://{ip}:{port}/api/Health",//健康检查地址
Interval = TimeSpan.FromSeconds(10),//健康检查间隔时间
Timeout = TimeSpan.FromSeconds(5)
}
}).Wait();//consul几乎都是异步方法,但是命名没有按照Async后缀的规范,所以需要调用Wait()或者await
};
//程序正常退出时候从Consul注销服务
//要通过方法参数注入IApplicationLifetime
appLifetime.ApplicationStopped.Register(() =>
{
using (var consulClient = new ConsulClient(c => { c.Address = new Uri("http://127.0.0.1:8500"); c.Datacenter = "dc1"; }))
{
Console.WriteLine("应用退出");
consulClient.Agent.ServiceDeregister(serviceId).Wait();
}
});
#endregion
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
四、启动项目
首先启动consul
1.生成解决方案
2.进入当前项目的bin目录中
..\bin\Debug\netcoreapp3.1
3.在地址栏输入cmd,进入命令行界面
4.运行程序
开启两个服务
运行项目在本地的6001端口
dotnet MsgService.dll --ip 127.0.0.1 --port 6001
再次进入目录使用命令
运行项目在本地的6001端口
dotnet MsgService.dll --ip 127.0.0.1 --port 6002
5.进入localhost:8500的consul界面查看是否注册成功
运行成功,注册完成
六、consul
1.服务只会注册ip,端口,consul只保存服务吗,ip,端口,至于服务提供什么接口,参数consul不管
2.consul负责的是对服务的注册,对现有服务的管理,告诉调用者服务器现有情况,以及做健康检查,确定服务器处于可用状态,不可用会进行注销。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!