背景

SpringCloud分布式项目,部署在多个节点上。一般的发版方式是,使用Kill -15 pid,逐一地关闭、部署、重启。

但中间涉及到一个问题,当执行kill命令时,服务虽然关闭,但Eureka那里依然保存着这台服务器的IP,请求依然会跑到这台服务器上。

直到持续数十秒后,Eureka将该服务的IP剔除掉。

如果请求量大,会导致大量请求在发版的过程中出现异常。所以要想到一个更优雅的方式来部署服务。

方案一:

调用Eureka的接口,让Eureka自动剔除该服务IP。

获取服务的AppID和InstanceID,分别对应响应中的<app>instanceId

curl -X GET \
http://IP:port/eureka/apps/

从可用服务列表中剔除该服务

curl -X PUT \
'http://IP:port/eureka/apps/AppID/InstanceID/status?value=DOWN' \

将该服务加到可用服务列表中

curl -X PUT \
'http://IP:port/eureka/apps/AppID/InstanceID/status?value=UP' \

方案二 :

调用服务接口,服务向Eureka报告为不可用状态

项目中增加配置,重点是service-registry

management.endpoints.web.exposure.include=health,info,service-registry

部署前执行命令

curl -X POST \
'http://IP:port/actuator/service-registry?status=DOWN' \
-H 'content-type: application/vnd.spring-boot.actuator.v2+json;charset=UTF-8' \

部署后执行命令

curl -X POST \
'http://IP:port/actuator/service-registry?status=UP' \
-H 'content-type: application/vnd.spring-boot.actuator.v2+json;charset=UTF-8' \

参考文档

[1]: Eureka REST operations

[2]: SpringCloud微服务如何优雅停机及源码分析

[3]: 实用技巧:Spring Cloud中,如何优雅下线微服务?

[4]: 服务如何做到优雅下线

[5]: Eureka优雅关闭服务

[6]: SpringCloud微服务如何优雅停机及源码分析

【解决方案】SpringCloud项目优雅发版、部署的更多相关文章

  1. Web项目打成war包部署Tomcat时运行startup.bat直接闪退部署失败解决方案

    即上篇通过将web项目打成war包部署到Tomcat服务器,解决mysql问题后,又出现了新问题,真是一波三折,所以将解决过程分享给大家,希望能帮助到小伙伴们~ 将打好的war包拷贝到Tomcat的w ...

  2. docker初体验:Docker部署SpringCloud项目eureka-server

    Docker部署SpringCloud项目eureka-server 1 创建eureka-server工程 创建父工程cloud-demo,其pom.xml如下: <?xml version= ...

  3. Devops 开发运维高级篇之Jenkins+Docker+SpringCloud微服务持续集成——部署方案优化

    Devops 开发运维高级篇之Jenkins+Docker+SpringCloud微服务持续集成--部署方案优化 之前我们做的方案部署都是只能选择一个微服务部署并只有一台生产服务器,每个微服务只有一个 ...

  4. MyEclipse修改项目名称后,部署到tomcat问题

    问题描述: 修改项目名称后,部署到tomcat server,部署出来的文件夹名还是旧的名称. 解决方案: 光把项目重命名是不够的,还要修改一下Myeclipse里面的配置. 工程名->右键-& ...

  5. MyEclipse修改项目名称后,部署到 tomcat问题

    问题描述: 修改项目名称后,部署到tomcat问题 解决方案: 项目->属性->myelcipse->web下,修 改web context root就可! 要在eclipse里面改 ...

  6. MyEclipse修改项目名称后,部署到tomcat问题。

    1.问题描述: 修改项目名称后,部署到tomcat server,部署出来的文件夹名还是旧的名称. 2.解决方案: 光把项目重命名是不够的,还要修改一下Myeclipse里面的配置. a). 工程名- ...

  7. ionic项目ios真机部署(不需开发者账号)

    ionic项目ios真机部署(不需开发者账号) 安装ionic和cordova npm install -g ionic npm install -g cordova 创建一个新项目 ionic st ...

  8. VS2017中使用组合项目_windows服务+winform管理_项目发布_测试服务器部署

    前言:作为一名C#开发人员,避免不了常和windows服务以及winform项目打交道,本人公司对服务的管理也是用到了这2个项目的组合方式进行:因为服务项目是无法直接安装到计算器中,需要使用命令借助微 ...

  9. eclipse mavenWeb项目真正实现热部署(修改java代码和页面文件不用重启tomcat)

            1.前言 首先,本文创作灵感源于博客园园作者signheart,特此鸣谢!原文链接见文末推荐: 百度都搜破了,全网讲的都是如何将maven项目部署到tomcat上,对于热部署的认知,真 ...

随机推荐

  1. ReactNative真机运行

    前提条件:USB 调试 你需要开启 USB 调试才能在你的设备上安装你的 APP. 首先,确定你已经打开设备的 USB 调试开关 确保你的设备已经成功连接.可以输入adb devices来查看: $ ...

  2. shopxo代码审计

    由于工作原因,分析了很多的cms也都写过文章,不过觉得好像没什么骚操作都是网上的基本操作,所以也就没发表在网站上,都保存在本地.最近突然发现自己博客中实战的东西太少了,决定将以前写的一些文章搬过来,由 ...

  3. sql 四舍五入 保留两位小数

    一.问题描述 数据库里的 float momey 类型,都会精确到多位小数.但有时候 我们不需要那么精确,例如,只精确到两位有效数字. 二.sqlserver解决方案: 1. 使用 Round() 函 ...

  4. 织梦dede:channelartlist调用排除指定typeid栏目

    在使用 dede:channelartlist 自动调用栏目内容时,经常会遇到某些栏目不需要调用,比如“关于我们”.“联系地址”等无持续更新的栏目.要想在 dede:channelartlist 调用 ...

  5. python中read()、readline()、readlines()区别

    1.read([size])方法 read([size])方法从文件当前位置读取size个字节,若无参数size,则表示读取至文件结束位置,它范围为字符串对象   2.readline()方法 从字面 ...

  6. Android笔记(十六) 简易计算器

    实现功能: 简单计算器 布局及美化 采用LinearLayout嵌套LinearLayout实现布局. 要求 1. 按钮所有文字居于右下角 2. 按钮为白色,点击变成橘色 3. 显示屏文字居右显示并且 ...

  7. android开机启动流程说明

    android开机启动流程说明 第一步:启动linux 1.Bootloader 2.Kernel 第二步android系统启动:入口为init.rc(system\core\rootdir) 1./ ...

  8. JS在浏览器中输出各种三角形

    直角三角形 <script type="text/javascript"> for(var i=1;i<=8;i++){ for(var j=1;j<=i; ...

  9. hexo Yelee 主题的busuanzi网站统计没数字显示问题解决

    j进入你的Yelee主题路径: themes\yelee\source\css\_partial 修改该路径下的: footer.styl 修改文件内容: 将内容改为: 然后你的站点就可以了

  10. Nginx突破高并发的性能优化 - 运维笔记

    在日常的运维工作中,经常会用到nginx服务,也时常会碰到nginx因高并发导致的性能瓶颈问题.今天这里简单梳理下nginx性能优化的配置(仅仅依据本人的实战经验而述,如有不妥,敬请指出~) 一.这里 ...