前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >teg 基于EUREKA优雅发布

teg 基于EUREKA优雅发布

作者头像
葫芦
发布2022-09-26 18:52:24
3250
发布2022-09-26 18:52:24
举报
文章被收录于专栏:葫芦葫芦

基于EUREKA优雅发布

基于EUREKA不优雅的原因

如图所示:

  1. app1的pod启动后会向eureka注册自己的服务名、ip、端口信息。
  2. app2想要调用app1的接口需要向eureka查询,通过向eureka发送app1的服务名获取app1 pod的ip和端口。
  3. app2 直接通过获取的ip、端口和app1的pod进行通讯。

不优雅的问题在于

  1. 当app1 pod滚动更新时,新pod拉起后会直接杀掉旧版的pod。
  2. 旧pod被杀掉后,30秒后eureka才会将此旧pod信息在eureka中清除。
  3. 但此期间如app2有有请求还会将其发送至旧的pod,此时旧的pod已经不存在了。 此时就发生了服务报错。

将服务变得优雅

1.java服务暴漏端点:

代码语言:javascript
复制
management:
  endpoints:
    web:
      exposure:
        include: service-registry

注意此端点暴漏需要做白名单限制即只可通过localhost调用

2.deployments添加生命周期钩子

代码语言:javascript
复制
    lifecycle:
      preStop:
        exec:
          command:
          - /bin/bash
          - /tmp/pre_stop.sh

3.添加预停止脚本到项目根目录中

代码语言:javascript
复制
#!/bin/bash
curl -X POST "http://localhost:8080/actuator/service-registry?status=DOWN"  -H "Content-Type: application/vnd.spring-boot.actuator.v2+json;charset=UTF-8"
sleep 40

4.在packege步骤中引入此脚本

代码语言:javascript
复制
FROM ****
ENV LANG C.UTF-8

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

COPY pre_stop.sh /tmp/pre_stop.sh
COPY build/libs/*jar /opt/spring-cloud/lib/app1.jar
EXPOSE 8080
ENTRYPOINT ["java","-server","-Xms2560m","-Xmx2560m", "-jar", "/opt/spring-cloud/lib/app1.jar]

最终优雅

完成以上步骤后,发布服务,第一次发布会讲脚本及生命周期钩子带上去。 当第二次发布即会成为优雅发布。

原理

在pod Terminating状态时通过pre_stop.sh脚本,告知eureka此pod注销,同时sleep 40秒等待,而后清除此pod。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基于EUREKA优雅发布
    • 基于EUREKA不优雅的原因
      • 将服务变得优雅
        • 最终优雅
          • 原理
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档