• HZERO微服务平台05: 利用灰度发布在本机快速开发调试


    背景

    目前微服务体系下请求的过程:

    web -> gateway -> 业务服务(实例1、实例2...)
    

    从浏览器发出的请求通过网关转发到业务服务, 当业务服务有多个实例时, 网关会随机(或轮询等策略)转发到某个服务实例;
    当线上和本地各有一个实例时, 前端发出的请求会在本地和线上随机发送, 既影响线上用户使用, 也影响开发人员调试;
    所以本地启动服务实例时, 通常需要修改服务名, 用swagger或postman调试, 不能通过前端页面来调试.

    我们希望实现的效果: 本地服务不修改服务名, 从开发人员浏览器发出的请求只会被转发到开发人员本机的实例, 线上其他用户发出的请求正常请求到线上的服务, 开发调试和正常使用都不影响;

    灰度发布概念:
    灰度发布_百度百科

    操作步骤

    总体思路: 给后端服务和前端请求加上标签, 网关通过标签选择实例;

    后端服务增加元数据

    本地服务不需要修改服务名, 增加metadata配置:

    spring:
      cloud:
        nacos:
          discovery:
            metadata:
              GROUP: QXX
    

    其中GROUP是固定key, 必须大写; QXX是自定义的名称; 服务启动后可以在nacos里看到:

    也可以通过环境变量配置:

    SPRING_APPLICATION_JSON={"spring.cloud.nacos.discovery.metadata.GROUP": "QXX"}
    

    下面配置是无效的, 因为"GROUP"会被转换成小写:

    SPRING_CLOUD_NACOS_DISCOVERY_METADATA_GROUP: QXX
    

    用浏览器插件给前端请求添加header

    浏览器安装插件, 给所有请求自动添加header, 以ModHeader插件为例:

    其中的X-Eureka-Label是固定的header名, 大小写任意; QXX和服务端定义的元数据相对应.
    此时浏览器发出的请求都会被带上X-Eureka-Label的header;

    验证效果

    打开前端, 本地发出的请求会全部转发到本地服务; 关闭ModHeader插件, 会转发到线上服务;

  • 相关阅读:
    杂七杂八的文档资料。
    图片(img标签)的onerror事件
    html的a标签的 href 和 onclick。
    【mysql】一次有意思的数据库查询分析。
    书籍:Building Secure PHP Apps
    js关闭当前页面/关闭当前窗口
    【汉字乱码】IE下GET形式传递汉字。
    弹出层展示插件。
    原型图设计工具。
    LeetCode(24): 两两交换链表中的节点
  • 原文地址:https://www.cnblogs.com/QIAOXINGXING001/p/15571801.html
Copyright © 2020-2023  润新知