Nepxion Discovery 6.3.2 版发布

Stella981
• 阅读 513

Nepxion Discovery 6.3.2 版发布

发布日志

发布策略

Nepxion Discovery 6.3.2 版发布 提醒:版本号右边, 表示>=该版本号, 表示<=该版本号
Nepxion Discovery 6.3.2 版发布 提醒:Spring Boot版本和Spring Cloud Alibaba版本需要在版本号后面加上.RELEASE

版本

状态

SC版本

SB版本

SCA版本

6.3.2

Nepxion Discovery 6.3.2 版发布

H.SR5 ↑
H
G
F

2.3.x
2.2.x
2.1.x
2.0.x

2.2.x
2.2.x
2.1.x
2.0.x

5.6.0

Nepxion Discovery 6.3.2 版发布

G

2.1.x

2.1.x

4.15.0

Nepxion Discovery 6.3.2 版发布

F

2.0.x

2.0.x

3.20.2

Nepxion Discovery 6.3.2 版发布

E

1.5.x

1.5.x

2.0.x

Nepxion Discovery 6.3.2 版发布

D

1.x.x

N/A

1.0.x

Nepxion Discovery 6.3.2 版发布

C

1.x.x

N/A

Nepxion Discovery 6.3.2 版发布 表示维护中 | Nepxion Discovery 6.3.2 版发布 表示不维护,但可用,强烈建议升级 | Nepxion Discovery 6.3.2 版发布 表示不维护,不可用,已废弃

  • 6.x.x版本(同时适用于Finchley、Greenwich和Hoxton以及未来的更高版本),将继续维护

  • 5.x.x版本(适用于Greenwich)已废弃

  • 4.x.x版本(适用于Finchley)已废弃

  • 3.x.x版本(适用于Edgware)不维护,但可用,强烈建议升级

  • 2.x.x版本(适用于Dalston)已废弃

  • 1.x.x版本(适用于Camden)已废弃

版本变更

无中间件版本变更

功能迭代

Nepxion Discovery 6.3.2 版发布 基于RESTful层面的功能全景

Nepxion Discovery 6.3.2 版发布

增加新的灰度蓝绿环境隔离路由触发方式

① 基于Http Query Parameter灰度蓝绿环境隔离路由

通过取值Query Parameter方式,即可实现既定功能

http://localhost:5001/discovery-guide-service-a/invoke/gateway?a=1

http://localhost:5001/discovery-guide-service-a/invoke/gateway?a=2

② 基于Http Cookie灰度蓝绿环境隔离路由

通过取值Cookie方式,即可实现既定功能

③ 基于域名灰度蓝绿环境隔离路由

通过取值域名前缀等方式,即可实现既定功能

本地测试,为验证结果,请事先在hosts文件中配置如下

127.0.0.1 common.nepxion.com 127.0.0.1 env1.nepxion.com 127.0.0.1 env2.nepxion.com

以根据域名全链路环境隔离为例,根据域名前缀中的环境名路由到相应的全链路环境中

  • 根据env1.nepxion.com域名路由到env1环境

Nepxion Discovery 6.3.2 版发布

  • 根据common.nepxion.com域名路由到common环境

Nepxion Discovery 6.3.2 版发布

④ 基于RPC Method灰度蓝绿

通过取值RPC调用中的方法入参方式,即可实现既定功能

只适用于服务侧

增加新的灰度蓝绿表达式参数

① 支持Http Header、Http Query Parameter、Http Cookie三种参数。例如,下面表达式,a、b、c的值可以来自Http Header、Http Query Parameter、Http Cookie中的任何一种。为兼容老的用法,统一以header节点来描述

② 支持Http Header、Http Query Parameter、Http Cookie混合策略表达式,例如,下面表达式,a的值可以来自于Http Header,b的值可以来自于Http Query Parameter,c的值可以来自于Http Cookie。如果同一个值同时存在于Http Header、Http Query Parameter、Http Cookie,优先级Http Header > Http Query Parameter > Http Cookie

<condition id="condition2" header="#H['a'] == '1' &amp;&amp; #H['b'] == '2' &amp;&amp; #H['c'] == '3'" version-id="version-route1"/>

增加新的过滤器中自定义方式

① 过滤器中自定义基于Http Query Parameter灰度蓝绿环境隔离路由

② 过滤器中自定义基于Http Cookie灰度蓝绿环境隔离路由

③ 过滤器中自定义环境隔离路由策略

参考如下代码

`public class MyGatewayStrategyRouteFilter extends DefaultGatewayStrategyRouteFilter {
    private static final Logger LOG = LoggerFactory.getLogger(MyGatewayStrategyRouteFilter.class);

    private static final String DEFAULT_A_ROUTE_VERSION = "{"discovery-guide-service-a":"1.0", "discovery-guide-service-b":"1.1"}";
    private static final String DEFAULT_B_ROUTE_VERSION = "{"discovery-guide-service-a":"1.1", "discovery-guide-service-b":"1.0"}";
    private static final String DEFAULT_A_ROUTE_REGION = "{"discovery-guide-service-a":"dev", "discovery-guide-service-b":"qa"}";
    private static final String DEFAULT_B_ROUTE_REGION = "{"discovery-guide-service-a":"qa", "discovery-guide-service-b":"dev"}";
    private static final String DEFAULT_A_ROUTE_ADDRESS = "{"discovery-guide-service-a":"3001", "discovery-guide-service-b":"4002"}";
    private static final String DEFAULT_B_ROUTE_ADDRESS = "{"discovery-guide-service-a":"3002", "discovery-guide-service-b":"4001"}";

    @Value("${a.route.version:" + DEFAULT_A_ROUTE_VERSION + "}")
    private String aRouteVersion;

    @Value("${b.route.version:" + DEFAULT_B_ROUTE_VERSION + "}")
    private String bRouteVersion;

    @Value("${a.route.region:" + DEFAULT_A_ROUTE_REGION + "}")
    private String aRouteRegion;

    @Value("${b.route.region:" + DEFAULT_B_ROUTE_REGION + "}")
    private String bRouteRegion;

    @Value("${a.route.address:" + DEFAULT_A_ROUTE_ADDRESS + "}")
    private String aRouteAddress;

    @Value("${b.route.address:" + DEFAULT_B_ROUTE_ADDRESS + "}")
    private String bRouteAddress;

    // 自定义根据Header全链路版本匹配路由
    @Override
    public String getRouteVersion() {
        String user = strategyContextHolder.getHeader("user");

        LOG.info("自定义根据Header全链路版本匹配路由, Header user={}", user);

        if (StringUtils.equals(user, "zhangsan")) {
            LOG.info("执行全链路版本匹配路由={}", aRouteVersion);

            return aRouteVersion;
        } else if (StringUtils.equals(user, "lisi")) {
            LOG.info("执行全链路版本匹配路由={}", bRouteVersion);

            return bRouteVersion;
        }

        return super.getRouteVersion();
    }

    // 自定义根据Parameter全链路区域匹配路由
    @Override
    public String getRouteRegion() {
        String user = strategyContextHolder.getParameter("user");

        LOG.info("自定义根据Parameter全链路区域匹配路由, Parameter user={}", user);

        if (StringUtils.equals(user, "zhangsan")) {
            LOG.info("执行全链路区域匹配路由={}", aRouteRegion);

            return aRouteRegion;
        } else if (StringUtils.equals(user, "lisi")) {
            LOG.info("执行全链路区域匹配路由={}", bRouteRegion);

            return bRouteRegion;
        }

        return super.getRouteRegion();
    }

    // 自定义根据Cookie全链路IP地址和端口匹配路由
    @Override
    public String getRouteAddress() {
        String user = strategyContextHolder.getCookie("user");

        LOG.info("自定义根据Cookie全链路IP地址和端口匹配路由, Cookie user={}", user);

        if (StringUtils.equals(user, "zhangsan")) {
            LOG.info("执行全链路IP地址和端口匹配路由={}", aRouteAddress);

            return aRouteAddress;
        } else if (StringUtils.equals(user, "lisi")) {
            LOG.info("执行全链路IP地址和端口匹配路由={}", bRouteAddress);

            return bRouteAddress;
        }

        return super.getRouteEnvironment();
    }

    @Autowired
    private GatewayStrategyContextHolder gatewayStrategyContextHolder;

    // 自定义根据域名全链路环境隔离
    @Override
    public String getRouteEnvironment() {
        String host = gatewayStrategyContextHolder.getURI().getHost();
        if (host.contains("nepxion.com")) {
            LOG.info("自定义根据域名全链路环境隔离, URL={}", host);

            String environment = host.substring(0, host.indexOf("."));

            LOG.info("执行全链路环境隔离={}", environment);

            return environment;
        }

        return super.getRouteEnvironment();
    }
}
`

服务侧功能增强

① 增加服务侧直接生效灰度蓝绿环境隔离路由策略,完全脱离网关而单独生效所有功能,即网关将不是全链路灰度蓝绿环境隔离路由的必要组件

② 支持基于内置Header的定时Job的服务调用灰度蓝绿

③ 修复服务侧未从内置Header获取条件Header的Bug

相关测试

自动化测试

① 增加自定义根据Http Header全链路版本匹配的测试用例

② 增加自定义根据Http Parameter全链路区域匹配的测试用例

③ 增加自定义根据Http Cookie全链路环境隔离的测试用例

④ 增加基于Http Header、Http Query Parameter、Http Cookie混合策略的测试用例

相关文档

Nepxion Discovery 6.3.2 版发布 Discovery【探索】微服务企业级解决方案

① Discovery【探索】微服务企业级解决方案文档

  • Discovery【探索】微服务企业级解决方案(PPT版) : http://nepxion.gitee.io/docs/link-doc/discovery-ppt.html

  • Discovery【探索】微服务企业级解决方案(PDF版) : http://nepxion.gitee.io/docs/link-doc/discovery-pdf.html

  • Discovery【探索】微服务企业级解决方案(HTML版) : http://nepxion.gitee.io/docs/link-doc/discovery-html.html

② Discovery【探索】微服务企业级解决方案源码。请访问Gitee镜像获得最佳体验

  • 源码Gitee同步镜像 : https://gitee.com/Nepxion/Discovery

  • 源码Github原镜像 : https://github.com/Nepxion/Discovery

③ Discovery【探索】微服务企业级解决方案指南示例源码。请访问Gitee镜像获得最佳体验

  • 指南Gitee同步镜像 : https://gitee.com/Nepxion/DiscoveryGuide

  • 指南Github原镜像 : https://github.com/Nepxion/DiscoveryGuide

④ Discovery【探索】微服务框架指南示例说明

  • 对于入门级玩家,参考 指南示例极简版 : https://github.com/Nepxion/DiscoveryGuide/tree/simple,分支为simple。涉及到指南篇里的灰度路由和发布的基本功能, Nepxion Discovery 6.3.2 版发布 参考 新手快速入门 : https://gitee.com/nepxion/DiscoveryGuide/blob/simple/GUIDE.md

  • 对于熟练级玩家,参考 指南示例精进版 : https://github.com/Nepxion/DiscoveryGuide/tree/master,分支为master。除上述《极简版》功能外,涉及到指南篇里的绝大多数高级功能

  • 对于骨灰级玩家,参考 指南示例高级版 : https://github.com/Nepxion/DiscoveryGuide/tree/premium,分支为premium。除上述《精进版》功能外,涉及到指南篇里的ActiveMQ、MongoDB、RabbitMQ、Redis、RocketMQ、MySQL等高级调用链和灰度调用链的整合

Nepxion Discovery 6.3.2 版发布 Polaris【北极星】企业级云原生微服务框架

① Polaris【北极星】企业级云原生微服务框架文档

  • Polaris【北极星】企业级云原生微服务框架(PDF版) : http://nepxion.gitee.io/docs/link-doc/polaris-pdf.html

  • Polaris【北极星】企业级云原生微服务框架(HTML版) : http://nepxion.gitee.io/docs/link-doc/polaris-html.html

② Polaris【北极星】企业级云原生微服务框架源码。请访问Gitee镜像获得最佳体验

  • 源码Gitee同步镜像 : https://gitee.com/polaris-paas/polaris-sdk

  • 源码Github原镜像 : https://github.com/polaris-paas/polaris-sdk

③ Polaris【北极星】企业级云原生微服务框架指南示例源码。请访问Gitee镜像获得最佳体验

  • 指南Gitee同步镜像 : https://gitee.com/polaris-paas/polaris-guide

  • 指南Github原镜像 : https://github.com/polaris-paas/polaris-guide

请联系我

微信、公众号和文档

Nepxion Discovery 6.3.2 版发布
Nepxion Discovery 6.3.2 版发布
Nepxion Discovery 6.3.2 版发布

本文分享自微信公众号 - Nepxion开源社区(iMicroService)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Easter79 Easter79
2年前
swap空间的增减方法
(1)增大swap空间去激活swap交换区:swapoff v /dev/vg00/lvswap扩展交换lv:lvextend L 10G /dev/vg00/lvswap重新生成swap交换区:mkswap /dev/vg00/lvswap激活新生成的交换区:swapon v /dev/vg00/lvswap
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
Java获得今日零时零分零秒的时间(Date型)
publicDatezeroTime()throwsParseException{    DatetimenewDate();    SimpleDateFormatsimpnewSimpleDateFormat("yyyyMMdd00:00:00");    SimpleDateFormatsimp2newS
Wesley13 Wesley13
2年前
4cast
4castpackageloadcsv.KumarAwanish发布:2020122117:43:04.501348作者:KumarAwanish作者邮箱:awanish00@gmail.com首页:
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
4个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这