java时间提醒微服务器_springcloud中微服务的优雅停机(已验证)
大部分项目部署中,为了方便,可能都直接使用kill -9 服务的pid来停掉服务。
但是由于Eureka采用心跳的机制来上下线服务,会导致服务消费者调用此已经kill的服务提供者然后出错。
可以采用以下方式来解决:
核心是先调用方法主动通知Eureka注册中心服务下线,然后再停掉服务。
本文会介绍几种eureka 注册中心服务下线的方式
最不可取的就是直接使用kill命令停掉服务。
默认情况下,如果Eureka Server在90秒没有收到Eureka客户的续约,它会将实例从其注册表中删除。但这种做法的不好之处在于, 客户端已经停止了运行,但仍然在注册中心的列表中。 虽然通过一定的负载均衡策略或使用熔断器可以让服务正常进行,但有没有方法让注册中心马上知道服务已经下线呢?
1、直接关闭服务
kill -9 没有善后
kill -15 有善后 会发送down状态到eureka server
kill java进程【不建议】
这种方式简单粗暴,直接造成的影响就是部分模块调用时出错,如果有多台服务器的话,一台一台地重启还是可以的,前提是调用端得有自己的重试策略,比如使用Feign作为客户端调用接口的话可以配置ribbon的重试策略,而且被调用方得做好幂等策略,防止重试调用时出现重复数据的问题。
2、向eureka 注册中心发送delete 请求,只是取消注册服务, 当发送心跳时还是会注册到eureka
格式为 eureka地址/eureka/apps/服务名称/实例名称
请求方式为delete
下面是取消注册一个服务的例子。
下图是用postman 发送delete请求
3.通过eureka变更服务状态的方式实现服务上下线,不会再发送心跳注册到eureka server
4. 客户端主动通知注册中心下线,下线后不会再注册到eureka了
如果你的eureka客户端是是一个spring boot应用,可以通过调用以下代码通知注册中心下线。
importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestMethod;importorg.springframework.web.bind.annotation.RestController;importcom.netflix.discovery.DiscoveryManager;importcom.shm.common.model.RespVO;importcom.shm.common.util.RespUtil;
@RestControllerpublic classOfflineController {
@RequestMapping(value= "/offline", method =RequestMethod.GET)public RespVOoffLine(){
DiscoveryManager.getInstance().shutdownComponent();returnRespUtil.success();
}
}
5、设置服务的状态,可通过状态变更来实现再eureka的上下线
pom中加入
actuator的包
org.springframework.boot
spring-boot-starter-actuator
以上的方式都能实现服务的下线,但是有的时候只想要下线某个服务,却不需要发布,等待事情处理完成后上线此服务,则以上方式就做不到了。这时可以通过设置微服务的状态来完成此功能。项目中整合了actuator的话就非常简单了,在项目启动的时候可以看到控制台的输出:
/actuator/service-registry 可以已Get的方式获取当前服务的状态,以Post的方式修改当前服务状态,如将服务设置为Down状态,这样其他微服务接收到此状态后将不调用此服务。将order服务状态设置为Down:
看下执行后的效果:
等到流量都没有进来后,需要发布的话直接发布接口,不需要发布可以直接上线当前服务:
这样一个服务的上线和下线就优雅的完成了,如果项目中没有使用Actuator框架,可以模仿Actuator框架的实现方式,详见类:ServiceRegistryEndpoint
如果要再上线:
总结
以上几种方式都可以实现微服的下线,3和5的方式最为优雅,可以主动下线和上线,在没有新流量进来后可以随时发布,这样在也不用等到半夜12点发布了。
java时间提醒微服务器_springcloud中微服务的优雅停机(已验证)相关推荐
- 微服务架构—优雅停机方案
1 介绍 微服务架构中的应用优雅停机主要是指应用实例有计划而平滑(即不产生需要处理的事故)的退出.应用服务器的停机主要分为两类:主动停机和被动停机,而其中主动停机和大部分的被动停机都是可以实现优雅停机 ...
- Java在游戏服务器开发中的应用
Java在游戏服务器开发中的应用 width="22" height="16" src="http://hits.sinajs.cn/A1/we ...
- 超微服务器型号,超微服务器主机配置raid
超微服务器主机配置raid 内容精选 换一换 微服务部署完后,您可以根据微服务的运行情况进行微服务的治理.您可以先在"服务目录 > 微服务列表"中创建微服务,启动微服务后,根 ...
- SpringCloud微服务如何优雅停机及源码分析 | 技术头条
戳蓝字"CSDN云计算"关注我们哦! 技术头条:干货.简洁.多维全面.更多云计算精华知识尽在眼前,get要点.solve难题,统统不在话下! 作者:Trust_FreeDom 转自 ...
- feign调用多个服务_SpringCloud中Feign服务调用请求方式及参数总结(示例代码)
前言 最近做微服务架构的项目,在用feign来进行服务间的调用.在互调的过程中,难免出现问题,根据错误总结了一下,主要是请求方式的错误和接参数的错误造成的.在此进行一下总结记录.以下通过分为三种情况说 ...
- 厦门超微服务器维护,超微GPU服务器品牌
超微GPUg4dbf9服务器品牌显然,这种方法最大的优点是节省了昂贵的存储设备投资,其缺点不难发现:它会产生不一致的数据,或者影响数据库的读取速度. .深度学*SDK(CUDA.cuDNN.NCCL) ...
- java smb跨服务器_Java中SMB的应用
目录 SMB 服务操作 Ⅰ SMB简介 Ⅱ SMB配置 2.1 Windows SMB Ⅲ 添加SMB依赖 Ⅳ 路径格式 Ⅴ 操作共享 Ⅵ 登录验证 SMB 服务操作 Ⅰ SMB简介 SMB(全称 ...
- linux 查看crond服务器,Linux中crond服务与crontab用法
补充:在使用crontab的时候,要特别注意的是运行脚本中能够访问到的环境变量和当前测试环境中的环境变量未必一致,一个比较保险的做法是在运行的脚本程序中自行设置环境变量(export) (1)先建一个 ...
- xp系统禁用wmi服务器,xp中哪些服务是可以关闭的
名称: ALG 描述: Application Layer Gateway Service 命令行: C:\WINDOWS\System32\alg.exe 制造商: Microsoft Corpor ...
最新文章
- Android UI开发详解之ActionBar .
- 图灵奖得主、AAAI候任主席展望“AI未来10年”
- Java针对ArrayList自定义排序的2种实现方法
- mysql 5.7 udf http_mysql下mysql-udf-http效率测试小记
- 典型海洋环境观测数据产品应用现状及对我国的启示
- (19)ISE14.7软件生成bit失败永久解决方法(FPGA不积跬步101)
- kvm虚拟化管理平台WebVirtMgr部署-完整记录(安装Windows虚拟机)-(4)
- spring-第十三篇之零配置支持
- 2021年百度智能云服务器最新租用价格表
- skiller v3 beta2 发布
- *16.5 shared_ptr使用场景、陷阱、性能分析与使用建议
- 饥荒控制台输入没用_饥荒代码为什么我输入没反应
- 无线安全专题_破解篇03--打造个人字典
- 百度搜索限定时间_看别人用百度搜东西,让我怀疑自己用了假的百度
- CI/CD的利器k8s+docker
- 变压器的这些特性,你了解多少?
- GO micro V3环境搭建
- 共线条件方程c语言程序,云南师范大学《C语言》期末考试样卷及答案
- STM8L105 微妙 毫秒延时
- 在线转换mobi文件的软件哪个好?分享3个mobi转换软件