zoukankan      html  css  js  c++  java
  • asp.net core 如何在Docker停止时,代码注销Consul中的服务

    Dockerfile中使用ENTRYPOINT,而不是CMD,至于这俩命令有啥区别,百度下吧。

    ENTRYPOINT ["dotnet", "LS.Saas.BaseInfo.HttpApi.Host.dll"]

    Startup.cs中的Configure方法注入:IApplicationLifetime lifeTime,它的ApplicationStopping就可以捕获到停止状态,不管是控制台停止,还是docker停止。

    //注销服务
    lifeTime.ApplicationStopping.Register(() => {
      client.Agent.ServiceDeregister(serviceId).GetAwaiter().GetResult();
    });

    1.docker stop [容器ID],起作用

    2.docker rm -f [容器ID],是不起作用的

    完整代码:

    /// <summary>
    /// 服务注册
    /// </summary>
    public static void ConsulRegister(IHostApplicationLifetime lifeTime)
    {
        var serviceId = $"{ConsulServiceIP}_{DateTime.Now.Ticks}";
    
        //注册服务
        ConsulClient client = new ConsulClient(
            (ConsulClientConfiguration c) =>
            {
                c.Address = new Uri(Configuration["Consul:Address"]); //Consul服务中心地址
                c.Datacenter = Configuration["Consul:DataCenter"]; //指定数据中心,如果未提供,则默认为代理的数据中心。
            }
        );
        string checkUrl = Configuration["Consul:CheckUrl"];
        client.Agent.ServiceRegister(new AgentServiceRegistration()
        {
            ID = serviceId, //服务编号,不可重复
            Name = Configuration["Consul:ServiceName"], //服务名称
            Port = ConsulServicePort, //本程序的端口号
            Address = ConsulServiceIP, //本程序的IP地址
            Check = new AgentServiceCheck()
            {
                DeregisterCriticalServiceAfter = TimeSpan.FromMilliseconds(1), //服务停止后多久注销
                Interval = TimeSpan.FromSeconds(5), //服务健康检查间隔
                Timeout = TimeSpan.FromSeconds(5), //检查超时的时间
                HTTP = $"http://{ConsulServiceIP}:{ConsulServicePort}{checkUrl}" //检查的地址
            }
        });
    
        //注销服务
        lifeTime.ApplicationStopping.Register(() => {
            client.Agent.ServiceDeregister(serviceId).GetAwaiter().GetResult();
        });
    }

    设置entrypoint,这是docker下dotnetcore能收到退出信号的必要条件。

    参考网址:https://q.cnblogs.com/q/113552/

  • 相关阅读:
    oracle单表选择率(selectivity)——计算执行计划的基数
    不该建索引及不走索引的原因
    SQL语言:DDL/DML/DQL/DCL
    HDU 4521 间隔》=1的LIS 线段树+dp
    九度OnlineJudge之1032:ZOJ
    FileUpload的使用案例
    【C++第三课】---新的关键字
    Clash of Clans(COC)资源压缩解密
    jquery第一期:运行第一个jquery
    Java 的zip压缩和解压缩
  • 原文地址:https://www.cnblogs.com/subendong/p/14344342.html
Copyright © 2011-2022 走看看