🎀Docker下Dubbo服务优雅上下线实现

简介
在Docker容器环境中部署基于Dubbo的服务时,实现服务的优雅上下线是至关重要的。这通常涉及到两个关键步骤:首先,确保服务能够从注册中心摘除,停止接受新的请求;其次,等待所有正在处理的请求完成后再终止容器。通过结合Kubernetes的preStop Hook和Dubbo的QoS功能,可以有效地实现这一目标。
环境
Docker + Kubernetes + SpringBoot + Dubbo
实现
PreStop Hook
Kubernetes提供了生命周期钩子(Lifecycle Hooks),其中preStop Hook可以在容器被删除前触发,允许执行一些操作来准备容器的关闭。例如,可以配置preStop Hook来调用Dubbo的QoS端点来通知服务下线:
preStop:
exec:
command: ["/bin/sh", "-c", "curl -X POST http://localhost:22222/offline && sleep 10"]
这里的命令会发送一个
HTTPPOST请求到本地运行的DubboQoS服务,触发服务下线流程,并且等待 10 秒钟给服务足够的时间来完成正在进行中的请求。
Dubbo QoS
为了使用QoS功能,需要确保Dubbo应用程序已经正确配置并启用了QoS。可以在 dubbo.properties文件中添加以下配置:
dubbo.application.qos-enable=true
dubbo.application.qos-port=22222
QOS详细介绍可前往查看:dubbo QOS介绍及命令
解析
当容器接收到删除信号时,
preStop Hook将被触发。它会先调用Dubbo的QoS/offline端点来让服务实例从注册中心摘除,阻止新的请求被路由至此实例。随后,通过睡眠一段时间(例如上述例子中的 10 秒),给服务足够的时间来完成已接收的请求。在这之后,容器才会真正开始关闭进程。值得注意的是,在实际应用中,可能还需要考虑如何处理异常情况,比如网络延迟或
QoS调用失败等问题。此时,可以通过设置合理的超时时间(TerminationGracePeriodSeconds)来确保即使某些步骤未按预期完成,容器最终也能被安全地销毁。
综上所述,通过合理配置Kubernetes的lifecycle hooks和Dubbo的QoS功能,可以构建出一个健壮的服务框架,使得服务能够在不影响用户体验的情况下进行更新或维护。这种方法不仅提高了系统的可靠性,同时也简化了运维人员的操作复杂度。
结束
🎀Docker下Dubbo服务优雅上下线实现的更多相关文章
- Docker下dubbo开发三部曲之三:java开发
在前两章<Docker下dubbo开发,三部曲之一:极速体验>和<Docker下dubbo开发,三部曲之二:本地环境搭建>中,我们体验了dubbo环境搭建以及服务的发布和消费, ...
- Serverless 架构下的服务优雅下线实践
作者 | 行松 阿里巴巴云原生团队 应用发布.服务升级一直是一个让开发和运维同学既兴奋又担心的事情. 兴奋的是有新功能上线,自己的产品可以对用户提供更多的能力和价值:担心的是上线的过程会不会出现意外情 ...
- 如何在docker下安装elasticsearch(上)
一 环境 VMware® Workstation 15 Pro centos7 (1810) docker19.03.1 二 进入centos7启动dcoker systemctl start doc ...
- docker下部署服务
一.zabbix部署 需求: 因最近项目过多,人力监控耗费时间,打算部署一个zabbix,但又不想部署在宿主机上,就想起了docker,docker快速的移植性是最大的亮点,好了,言归正传开始干. 部 ...
- zookeeper 服务端上下线,客户端感知
package pfs.y2017.m11.zookeeper.demo03; import java.util.ArrayList; import java.util.List; import or ...
- springcloud优雅停止上下线与熔断
SpringCloud 服务优雅上下线 Spring Boot 框架使用"约定大于配置"的特性,优雅流畅的开发过程,应用部署启动方式也很优雅.但是我们通常使用的停止应用的方式是 k ...
- Spring Cloud Alibaba(四)实现Dubbo服务消费
本项目演示如何使用 Spring Cloud Alibaba 完成 Dubbo 的RPC调用. Spring Cloud与Dubbo Spring Cloud是一套完整的微服务架构方案 Dubbo是国 ...
- Dubbo学习笔记9:Dubbo服务提供方启动流程源码分析
首先我们通过一个时序图,直观看下Dubbo服务提供方启动的流程: 在<Dubbo整体框架分析>一文中我们提到,服务提供方需要使用ServiceConfig API发布服务,具体是调用代码( ...
- (转)淘淘商城系列——引用dubbo服务
http://blog.csdn.net/yerenyuan_pku/article/details/72758663 上文我们一起学习了如何发布一个dubbo服务,本文我就来教大家如何在web工程中 ...
- docker下tomcat连redis
之前已经讲了然后通过Maven 项目管理工具创建Web项目, 最后打包成War包 讲了docker 配置 Tomcat , Redis 现在讲如何使用War包,以及在docker下, 让jsp连上re ...
随机推荐
- [rustGUI][iced]基于rust的GUI库iced(0.13)的部件学习(04):实现窗口主题(颜色)变换(暨menu菜单的使用)
前言 本文是关于iced库的部件介绍,iced库是基于rust的GUI库,作者自述是受Elm启发. iced目前的版本是0.13.1,相较于此前的0.12版本,有较大改动. 本合集是基于新版本的关于分 ...
- linux:安装php7.x
参考:链接 更新yum源 CentOS/RHEL 7.x: rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.n ...
- NAT原理:概念、使用场景、转发流程及规则
本文分享自天翼云开发者社区<NAT原理:概念.使用场景.转发流程及规则>,作者:x****n 网络地址转换(NAT)是一种在计算机网络中将一个网络的IP地址转换为另一个网络的IP地址的技术 ...
- Linux重要的日志文件
1./var/log/boot.log 该文件记录了系统在引导过程中发生的事件,就是Linux系统开机自检过程显示的信息 2./var/log/syslog 只记录警告信息,常常是系统出问题的信息,所 ...
- Hetao P3804 Cut 题解 [ 蓝 ] [ AC 自动机 ] [ 差分 ]
Cut:AC 自动机简单题. 思路 看见多个模式串以及求前缀,很显然能想到构建一个 AC 自动机. 那么在用 \(T\) 查询时,当前指针的深度就是该位置的最长前缀匹配长度.这个在字典树 insert ...
- RabbitMQ(六)——路由模式
RabbitMQ系列 RabbitMQ(一)--简介 RabbitMQ(二)--模式类型 RabbitMQ(三)--简单模式 RabbitMQ(四)--工作队列模式 RabbitMQ(五)--发布订阅 ...
- 离线安装Docker社区版详细教程
Docker是一个开源的应用容器引擎,使得开发者可以打包应用以及依赖包到一个轻量级的.可移植的容器中,然后发布到任何支持Docker的平台上.本文将详细介绍如何在离线环境下安装Docker社区版. 1 ...
- 大数据之路Week10_day01 (Hbase总结 II)
Hbase是数据库 特点: 1.面向列:Hbase是面向列的存储和权限控制,并支持独立索引.列式存储,其数据在表中是按照某列存储的,这样在查询只需要少数几个字段时,能大大减少读取的数据量. 2.多版本 ...
- JUC相关知识点总结
Java JUC(java.util.concurrent)是Java并发编程的核心工具包,提供了丰富的并发工具类和框架.以下是JUC的主要知识点,按难易程度分类,供你参考: 1. 基础概念与工具类 ...
- deepseek:封装一个axios
封装一个包含上传和下载文件功能的 axios 实例,可以提高代码的复用性和可维护性.以下是一个完整的封装示例,支持文件上传.下载.以及常规的 GET/POST 请求. 封装代码 import axio ...