springcloud 服务下线,有什么好方法吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
liubx
V2EX    Java

springcloud 服务下线,有什么好方法吗?

  •  
  •   liubx 2020-08-14 09:58:27 +08:00 3566 次点击
    这是一个创建于 1933 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在我使用的方法是:

     DiscoveryManager.getInstance().shutdownComponent(); 

    但是被标记为过时了。

    还有种方法是使用 springboot-actuator 的/actuator/service-registry这个接口。

    请问,有什么更好的方法吗?

    16 条回复    2020-08-17 14:13:23 +08:00
    qwerthhusn
        1
    qwerthhusn  
       2020-08-14 10:17:07 +08:00
    kill -15
    qwerthhusn
        2
    qwerthhusn  
       2020-08-14 10:17:21 +08:00
    不行就暴力点,kill -9
    liubx
        3
    liubx  
    OP
       2020-08-14 10:19:56 +08:00
    @qwerthhusn 这样不是会访问到挂了实例吗?我这样做过,发现会有缓存。有十几秒的时间
    gdtdpt
        4
    gdtdpt  
       2020-08-14 10:44:59 +08:00
    @liubx kill -15 是不会的,springboot 会向 eureka 发送完服务下线的消息才停止。
    earther01
        5
    earther01  
       2020-08-14 13:53:40 +08:00
    我理解,eureka client 是有本地缓存的,所以不管用哪种方法通知 eureka server 某服务下线,都要等 client 的缓存失效才能防止路由到到下线服务的情况
    zliea
        6
    zliea  
       2020-08-14 14:14:32 +08:00
    curl -X POST ${manangement.service.host}${manangement.service.port}/actuator/shutdown
    zliea
        7
    zliea  
       2020-08-14 14:16:25 +08:00
    好吧,看错了,是 springcloud 。。。。。。
    luzhh
        8
    luzhh  
       2020-08-14 14:34:12 +08:00
    我之前用 consul,用下面的代码可以从注册中心移除当前实例,我当时是写了个接口,请求接口从之后再 shutdown
    ```
    private ConsulClient consulClient;
    private ConsulRegistration consulRegistration;

    @Autowired
    public ConsulServiceController(ConsulClient consulClient, ConsulRegistration consulRegistration) {
    this.cOnsulClient= consulClient;
    this.cOnsulRegistration= consulRegistration;
    }

    @RequestMapping(value = "/service/leave")
    public Boolean leave() {
    consulClient.agentServiceDeregister(consulRegistration.getInstanceId());
    return true;
    }

    ```
    当然用 kill -15 效果是一样的
    luzhh
        9
    luzhh  
       2020-08-14 14:35:27 +08:00
    @luzhh #8 没注意看,不小心 at 了两位 v 友
    user9121
        10
    user9121  
       2020-08-14 14:56:37 +08:00
    先用 service-registry 标注服务为 out_of_service 然后等待 eureka server 的缓存,eureka client 的缓存,fegin(rebbon)缓存过期(默认一共是 90 秒),然后 stop.然后部署,健康检查,没问题就继续下一台
    neuliuxi
        11
    neuliuxi  
       2020-08-14 15:09:19 +08:00
    用 eureka 作为注册中心,下线后一定会有一个过期时间,只是时间长短的问题,所以你需要配置服务的超时、重试,甚至于熔断降级
    BBCCBB
        12
    BBCCBB  
       2020-08-14 15:26:31 +08:00
    http://www.appblog.cn/2019/11/21/Spring%20Boot%202.0%20%E4%B9%8B%E4%BC%98%E9%9B%85%E5%81%9C%E6%9C%BA/

    参考这个呢, 先从 eureka 下线, 再把 servlet 容器暂停, 等处理完剩下的请求就可以销毁了.
    amon
        13
    amon  
       2020-08-14 15:30:59 +08:00
    参考官方文档,有提供 rest 接口。
    https://github.com/Netflix/eureka/wiki/Eureka-REST-operations
    amoyiki
        14
    amoyiki  
       2020-08-14 15:35:03 +08:00
    借个楼。 我也有遇到类似这方面的,主要是 docker swarm 更新服务后有一小段时间服务不可用。
    理想场景:
    docker health 检查正常后再注册到 eureka 上。下线时,先下线服务,等旧请求全部处理完后,eureka 下线。再隔个十几秒关闭容器。
    不知道各位有没有这样的解决方案
    liubx
        15
    liubx  
    OP
       2020-08-17 09:39:11 +08:00
    @neuliuxi 请问是在网关做,重试和熔断吗?
    qwerthhusn
        16
    qwerthhusn  
       2020-08-17 14:13:23 +08:00
    不过我感觉 eureka 的取消注册实例好像不管用,即使关了自我保护模式,服务下线了,还是会请求到
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1065 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 18:04 PVG 02:04 LAX 10:04 JFK 13:04
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86