本篇文章1726字,读完约4分钟
阿里云国际站经销商,主营阿里云,腾讯云,华为云,亚马逊aws,谷歌云gcp,微软云az,免费开户,代充值优惠大,联系客服飞机@jkkddd
开发场景:基于消息队列RocketMQ版实现环境隔离
本文介绍如何在Serverless应用引擎SAE(Serverless App Engine)上基于阿里云消息队列RocketMQ版实现环境隔离,您可以在不修改任何业务代码的情况下,实现异步场景下的流量控制。准备工作
部署SAE Demo应用
下载Demo。
部署主干链路应用。
部署主干链路应用(A、B、C)。具体操作,请参见将Spring Cloud应用托管到SAE。
部署灰度链路应用(A-gray、B-gray、C-gray),在启动命令中添加启动参数-Dalicloud.service.tag=gray用于区别主干链路应用。
部署RocketMQ
消息的生产者和消息的消费者,需要同时开启RocketMQ消息灰度,消息的灰度功能才能生效。消息类型目前只支持RocketMQ,包含开源版本(Apache RocketMQ)和阿里云商业版(消息队列RocketMQ版)。
如果您使用开源RocketMQ,则RocketMQ Server和RocketMQ Client都需要使用4.5.0及以上版本。更多信息,请参见Apache RocketMQ。
如果您使用阿里云消息队列RocketMQ版,需要使用铂金版,且Ons Client使用1.8.0.Final及以上版本。更多信息,请参见快速入门概述。
开启RocketMQ消息灰度后,消息的Consumer Group会被修改。例如原来的Consumer Group为group1,环境标签为gray,开启RocketMQ消息灰度后,则group会被修改成group1_gray,如果您使用的是阿里云消息队列RocketMQ版 ,请提前创建好Group。
默认使用SQL92的过滤方式,如果您使用开源RocketMQ,需要在服务端开启SQL92过滤功能(即在broker.conf中配置enablePropertyFilter=true)。
步骤一:为应用开启RocketMQ消息灰度
Demo中的spring-cloud-c、spring-cloud-a应用分别为消息的生产者和消费者,通过添加启动参数-Dprofiler.micro.service.mq.gray.enable=true,在SAE上为其开启RocketMQ消息灰度。
步骤二:引入流量并进行验证
Demo应用的结构图如下,应用之间的调用,既包含了Spring Cloud的调用,也包含了Dubbo的调用,覆盖了当前市面上最常用的两种微服务框架。其中C应用会生产出RocketMQ消息,由A应用进行消费,A应用在消费消息时,也会发起新的调用。这些应用都是基础的Spring Cloud、Dubbo和RocketMQ的标准用法。
Demo的调用链路为:spring-cloud-zuul应用在收到/A/dubbo的请求时,会把请求转发给spring-cloud-a,然后spring-cloud-a通过Dubbo协议去访问spring-cloud-b,spring-cloud-b也通过Dubbo协议去访问spring-cloud-c,spring-cloud-c在收到请求后,会生产一个消息,并返回自己的环境标签和IP地址。这些生产出来的消息会由spring-cloud-a应用消费,spring-cloud-a应用在消费消息的时候,会通过spring cloud去调用spring-cloud-b,spring-cloud-b进而通过spring cloud去调用spring-cloud-c,并且将结果输出到自己的日志中。
您可以登录SAE控制台,查看spring-cloud-a应用的日志并验证配置。基线环境可以同时消费灰度(gray)和基线(base)环境生产出来的消息,而且在消费对应环境消息时产生的Spring Cloud调用分别路由到灰度(gray)和基线(base)环境中。具体操作,请参见查看实时日志。