• 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/

  • 相关阅读:
    POJ 1273:Drainage Ditches(EK 最大流)
    牛客假日团队赛6 H:Charm Bracelet (01背包)
    牛客假日团队赛6 F:Mud Puddles
    牛客假日团队赛6 E:对牛排序
    牛客假日团队赛6 D:迷路的牛
    牛客假日团队赛6 C:Bookshelf 2
    牛客假日团队赛6 B:Bookshelf
    牛客假日团队赛6 A:Card Stacking (模拟)
    UVA
    (转载)Mysql查找如何判断字段是否包含某个字符串
  • 原文地址:https://www.cnblogs.com/subendong/p/14344342.html
Copyright © 2020-2023  润新知