最近研究了一下Spring Cloud的灰度发布, 发现方法真是多. 这里先提供一个修改Eureka注册中心里的instance实例的metadata的脚本, 可以方便地用来测试效果.

使用举例: sh eureka.sh BETAZONE-HELLO-REMOTENAME 172.18.0.145 9001 zone main

  • 你的应用服务名字为: BETAZONE-HELLO-REMOTENAME
  • 实例服务的地址: 172.18.0.145
  • 实例服务的端口: 9001
  • 要修改的metadata key: zone
  • 要修改的metadata 值: main

脚本如下, github地址: https://github.com/cnscud/javaroom/tree/main/betazone2

#!/bin/bash

###
### 修改eureka的instance的metadata.
###
### @author Felix Zhang 2021.6.7
### # eureka host 服务器地址, 修改为自己的真实地址
eurekaHost='127.0.0.1:8001' inputready=1 if [ ! -n "$1" ]; then
echo "command error:serviceName empty!"
inputready=0
fi if [ ! -n "$2" ]; then
echo "command error:serviceIp empty!"
inputready=0
fi if [ ! -n "$3" ]; then
echo "command error:servicePort empty!"
inputready=0
fi if [ ! -n "$4" ]; then
echo "command error:metadata-key empty!"
inputready=0
fi if [ ! -n "$5" ]; then
echo "command error:metadata-value empty!"
inputready=0
fi if [ $inputready -eq 0 ]; then
echo "Command Format: $0 serviceName serviceIp servicePort metadata-key metadata-value"
echo "Example: $0 serviceName1 192.168.0.105 9001 zone beta"
exit
fi #转为小写
serviceName=$(echo "$1" | tr '[:upper:]' '[:lower:]')
hostName=$2
servicePort=$3
metakey=$4
metavalue=$5 # download eureka service list xml
echo 'start download eureka service list xml!'
curl -X GET http://${eurekaHost}/eureka/apps > eureka.xml
if [ $? -eq 0 ]; then
echo "download eureka service success!"
else
echo "download eureka service fail!"
fi findinstance=0
myinstanceId="$hostName:$serviceName:$servicePort"
realinstanceId="" i=1
while true;
do
xmllint --xpath "//instance[$i]/app/text()" eureka.xml >> /dev/null 2>&1
if [ $? -eq 0 ]; then
appName=$(xmllint --xpath "//instance[$i]/app/text()" eureka.xml)
lowcaseAppName=$(echo "$appName" | tr '[:upper:]' '[:lower:]')
ipAddr=$(xmllint --xpath "//instance[$i]/ipAddr/text()" eureka.xml)
port=$(xmllint --xpath "//instance[$i]/port/text()" eureka.xml)
instanceId=$(xmllint --xpath "//instance[$i]/instanceId/text()" eureka.xml)
echo "instance: $appName $ipAddr $port --> $instanceId" if [ "$ipAddr:$lowcaseAppName:$port" == "$myinstanceId" ]; then
findinstance=1
realinstanceId=$instanceId
fi
else
break
fi #递增
let i+=1
done if [ $findinstance -eq 0 ]; then
echo "not find your instance: $myinstanceId"
exit
else
echo "find your instance: $myinstanceId --> $realinstanceId"
fi curl -X PUT "$eurekaHost/eureka/apps/$serviceName/$realinstanceId/metadata?$metakey=$metavalue" if [ $? -eq 0 ]; then
echo "update $serviceName $hostName $metakey:$metavalue success!"
else
echo "update $serviceName $hostName $metakey:$metavalue fail!"
fi

参考文章: https://blog.csdn.net/leadseczgw01/article/details/113242279

修改Eureka的metadata脚本的更多相关文章

  1. linux批量修改文件名的shell脚本

    linux中批量修改文件名的shell脚本代码,主要是使用了rename,结合shell,喜欢的朋友可以参考下 使用 rename 命令  ========================  NAME ...

  2. 零零碎碎写的shell脚本(二):一键修改网络配置信息脚本

    #!/bin/bash ip_mod=$ mask_mod=$ gw_mod=$ dns_mod=$ hostname_mod=$ hosts=/etc/hosts ifcfg=/etc/syscon ...

  3. 使用python修改QQ密保(脚本)

    一.基于以下目的: 1.为了增加对Http协议理解能力,对QQ密保修改的请求进行了分析 2.为了锻炼python的编写能力 3.对web综合知识的理解 花了点时间写了这个脚本,下面介绍脚本的过程 二. ...

  4. 基于binlog来分析mysql的行记录修改情况(python脚本分析)

          最近写完mysql flashback,突然发现还有有这种使用场景:有些情况下,可能会统计在某个时间段内,MySQL修改了多少数据量?发生了多少事务?主要是哪些表格发生变动?变动的数量是怎 ...

  5. 批量修改git仓库地址脚本

    前言   公司的代码都存放在自己搭建的gitlab上面.之前由于老板升级gitlab.导致下面有个叫做"api"的groups无法访问.通过无所不能的谷歌才知道.在gitlab在某 ...

  6. Python3 写的远程批量修改文件内容的脚本

    一.说明: 1.利用Python的paramiko模块,调用远程的shell命令去修改相应文件. 2.有一个专用配置文件,列出服务器清单. 3.Python循环读取配置文件的服务器IP去连接它,并执行 ...

  7. Android开发之修改Manifest中meta-data的数据

    代码 private void initFMMap() { ApplicationInfo appInfo = null; try { appInfo = this.getPackageManager ...

  8. C# 修改PNG图片metadata信息 (含转载fancyblogs博文)

    WPF中使用 metadata-extractor可以轻松获取 PNG图片metadata信息 NuGet 获取地址: PM> Install-Package MetadataExtractor ...

  9. linux如何通过脚本来修改用户的密码?脚本自动化修改用户密码?

    需求描述: linux环境中在创建用户的时候,涉及到修改用户的密码,一般是通过passwd命令进行修改,需要多次的确认,这里考虑通过一条命令直接对密码进行修改 不需要进行交互的方式.在此记录. 操作过 ...

随机推荐

  1. C#调百度通用翻译API翻译HALCON的示例描述

    目录 准备工作 参数简介 输入参数 输出参数 使用HttpClient 翻译工具类 应用:翻译HALCON的示例描述 准备工作 HALCON示例程序的描述部分一直是英文的,看起来很不方便.我决定汉化一 ...

  2. DL基础补全计划(一)---线性回归及示例(Pytorch,平方损失)

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文作为本人csdn blog的主站的备份.(Bl ...

  3. Centos7.5使用SSH密钥登录

    12.1.查看操作系统版本 # cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) 12.2.在服务器端创建密钥 # ssh-ke ...

  4. 1、Linux下源码编译安装PostgreSQL

    操作系统:Centos7 说明:postgresql必须在postgres用户下初始化数据库和启动,否则报错. PostgreSQL的特性 PostgreSQL是一种几乎可以运行在各种平台上的免费的开 ...

  5. 7、linux快捷键

    ctrl +a:切换到命令行开始 ctrl+e:切换到命令行结尾 ctrl+c:终止当前命令或脚本 ctrl+d:退出当前shell,相当于exit ctrl+l:清除当前屏幕的内容,相当于clear ...

  6. 微信小程序 添加左边固定浮动框

    view: <!-- 悬浮框 --> <view class="v-fixed-title1"> <view class="v-fixed- ...

  7. KDE桌面环境下konsole,kate等软件无法切换中文输入法

    解决方案(arch): 修改/etc/profile,增加以下语句: #fcitxexport XIM_PROGRAM=fcitxexport XIM=fcitxexport GTK_IM_MODUL ...

  8. Integer Inquiry 大数加法

    Integer Inquiry 1 import java.util.*; 2 import java.math.*; 3 import java.io.*; 4 import java.text.* ...

  9. kotlin gradle 生成jni头文件

    目录 问题 解决方法 使用方法 代码 gradle task位置截图 问题 最近在用kotlin写jni,但是生成头文件的时候遇到了些问题. 首先 javah 在java >= 1.9 就被取消 ...

  10. CentOS-Docker搭建MinIO(单点)

    下载镜像 $ docker pull minio/minio 创建相关目录 $ mkdir /home/minio/data /home/minio/config -p 运行镜像(自定义Access和 ...