.Net Core微服务入门全纪录(二)——Consul-服务注册与发现(上)
2021-02-05 22:15
标签:tco route hub icon 移除 context 服务 ret 服务注册 上一篇【.Net Core微服务入门全纪录(一)——项目搭建】讲到要做到服务的灵活伸缩,那么需要有一种机制来实现它,这个机制就是服务注册与发现。当然这也并不是必要的,如果你的服务实例很少,并且很稳定,那么就没有必要使用服务注册与发现。 有了服务注册与发现,客户端就不用再去配置各个服务实例的地址,改为从注册中心统一获取。 常见注册中心有 Consul、ZooKeeper、etcd、Eureka。 Consul官网:https://www.consul.io/ 首先Nuget安装一下Consul: 改造一下订单服务的代码: ConsulHelper.cs: appsettings.json: Startup.cs: OrdersController.cs: HealthCheckController.cs: 至此就完成了服务注册,取消注册,健康检查等功能的代码编写。 继续在docker中运行服务实例,不习惯docker的话用控制台启动也行。--ConsulSetting:ServicePort参数就是传入容器的端口信息。 至此,6个服务器实例都已运行,并且成功注册到Consul。 随便停止2个服务: 当然程序发生异常,健康检查不能正确响应的话,Consul也会移除,有一点区别。 那么注册,发现,健康检查功能都完成了,下一步就该考虑客户端如何拿到这些服务实例的地址了。 代码放在:https://github.com/xiajingren/NetCoreMicroserviceDemo 未完待续... .Net Core微服务入门全纪录(二)——Consul-服务注册与发现(上) 标签:tco route hub icon 移除 context 服务 ret 服务注册 原文地址:https://www.cnblogs.com/xhznl/p/13091750.html前言
服务注册与发现
那注册中心又是怎么保证每个地址的可用状态呢,假如某个实例挂了怎么办呢?原则上挂掉的实例不应该被客户端获取到,所以就要提到:健康检查 。
Consul
Consul的主要功能有服务注册与发现、健康检查、K-V存储、多数据中心等。
consul.exe agent -dev
Consul已成功运行。服务注册
这个类库里封装了Consul的api操作,方便我们直接使用。当然自己去写http调用Consul的接口也不是不行。。。接口说明:https://www.consul.io/api-docs public static class ConsulHelper
{
///
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"ConsulSetting": {
"ServiceName": "OrderService",
"ServiceIP": "localhost",
"ServiceHealthCheck": "/healthcheck",
"ConsulAddress": "http://host.docker.internal:8500"//注意,docker容器内部无法使用localhost访问宿主机器,如果是控制台启动的话就用localhost
}
}
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();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IHostApplicationLifetime lifetime)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
//服务注册
app.RegisterConsul(Configuration, lifetime);
}
}
[Route("[controller]")]
[ApiController]
public class OrdersController : ControllerBase
{
private readonly ILogger
[Route("[controller]")]
[ApiController]
public class HealthCheckController : ControllerBase
{
///
运行服务
docker build -t orderapi:1.0 -f ./Order.API/Dockerfile .
docker run -d -p 9060:80 --name orderservice orderapi:1.0 --ConsulSetting:ServicePort="9060"
docker run -d -p 9061:80 --name orderservice1 orderapi:1.0 --ConsulSetting:ServicePort="9061"
docker run -d -p 9062:80 --name orderservice2 orderapi:1.0 --ConsulSetting:ServicePort="9062"
docker build -t productapi:1.0 -f ./Product.API/Dockerfile .
docker run -d -p 9050:80 --name productservice productapi:1.0 --ConsulSetting:ServicePort="9050"
docker run -d -p 9051:80 --name productservice1 productapi:1.0 --ConsulSetting:ServicePort="9051"
docker run -d -p 9052:80 --name productservice2 productapi:1.0 --ConsulSetting:ServicePort="9052"
可以看到停止的服务已经在Consul中被移除。注意,这个是我们停止程序时主动调用Consul移除的。//应用程序终止时,取消注册
lifetime.ApplicationStopping.Register(() =>
{
consulClient.Agent.ServiceDeregister(registration.ID).Wait();
});
文章标题:.Net Core微服务入门全纪录(二)——Consul-服务注册与发现(上)
文章链接:http://soscw.com/index.php/essay/51521.html