赛尔校园公共服务平台 Logo
平台使用
阿里云
百度云
移动云
智算服务
教育生态
登录 →
赛尔校园公共服务平台 Logo
平台使用 阿里云 百度云 移动云 智算服务 教育生态
登录
  1. 首页
  2. 阿里云
  3. Serverless应用引擎(新版)
  4. 实践教程
  5. 应用开发和部署
  6. 开发场景:基于消息队列RocketMQ版实现环境隔离

开发场景:基于消息队列RocketMQ版实现环境隔离

  • 应用开发和部署
  • 发布于 2025-04-17
  • 0 次阅读
文档编辑
文档编辑

本文介绍如何在Serverless 应用引擎 SAE(Serverless App Engine)上基于阿里云云消息队列 RocketMQ 版实现环境隔离,您可以在不修改任何业务代码的情况下,实现异步场景下的流量控制。

背景信息

dg_rocket_mq_workflow

  • 支持RocketMQ版本:4.2.0及以上版本。

  • 支持Pull和Push两种模式。

  • 需要在服务端配置enablePropertyFilter=true并重启服务端。

准备工作

部署SAE Demo应用

  1. 下载Demo。

  2. 部署主干链路应用。

    部署主干链路应用(A、B、C)。具体操作,请参见将应用的服务注册与发现中心更改为Nacos。

  3. 部署灰度链路应用(A-gray、B-gray、C-gray),在启动命令中添加启动参数-Dalicloud.service.tag=gray用于区别主干链路应用。

说明

部署时,如果需要使用独立的注册中心,需要添加启动参数-Dnacos.use.endpoint.parsing.rule=false -Dnacos.use.cloud.namespace.parsing=false。

部署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消息灰度。

说明

RocketMQ消息灰度功能的开启和关闭,需要在SAE控制台重新部署应用后才能生效。

步骤二:引入流量并进行验证

Demo应用的结构图如下,应用之间的调用,既包含了Spring Cloud的调用,也包含了Dubbo的调用,覆盖了当前市面上最常用的两种微服务框架。其中C应用会生产出RocketMQ消息,由A应用进行消费,A应用在消费消息时,也会发起新的调用。这些应用都是基础的Spring Cloud、Dubbo和RocketMQ的标准用法。

dg_implement_end_to_end_canary_release_via_rocket_mq

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,并且将结果输出到自己的日志中。

#访问/A/dubbo的时候
#返回值为A[10.25.xx.xx] -> B[10.25.xx.xx] -> C[10.25.xx.xx]
#同时,A应用在接收到消息之后,输出的日志如下:
c.a.mse.demo.service.MqConsumer: topic:TEST_MQ,producer:C[10.25.xx.xx],invoke result:A[10.25.xx.xx] -> B[10.25.xx.xx] -> C[10.25.xx.xx]

您可以登录SAE控制台,查看spring-cloud-a应用的日志并验证配置。基线环境可以同时消费灰度(gray)和基线(base)环境生产出来的消息,而且在消费对应环境消息时产生的Spring Cloud调用分别路由到灰度(gray)和基线(base)环境中。

相关文章

通过命名空间实现开发环境、测试环境和生产环境的隔离 2025-04-17 10:59

如果您在部署应用时需要区分开发环境、测试环境和生产环境,您可以为每套环境创建一个命名空间。同一命名空间的应用之间可以通过内网实现方法调用,不同命名空间的应用可以实现相互隔离。 方案概览 本文将指引您创建dev、test、prod三个命名空间,分别用

开发场景:通过端云互联实现开发和测试环境隔离 2025-04-17 10:59

本文通过模拟真实的调用链路,为您演示如何自动实现Serverless 应用引擎 SAE(Serverless App Engine)本地开发环境与测试环境的流量隔离,方便您快速开发联调,提高开发效率。

开发场景:基于消息队列RocketMQ版实现环境隔离 2025-04-17 10:59

本文介绍如何在Serverless 应用引擎 SAE(Serverless App Engine)上基于阿里云云消息队列 RocketMQ 版实现环境隔离,您可以在不修改任何业务代码的情况下,实现异步场景下的流量控制。

线上场景:基于自建Spring Cloud Gateway或Zuul网关实现全链路灰度 2025-04-17 10:59

本文通过示例演示如何在SAE上实现全链路灰度发布, 可以在不需要修改您的任何业务代码的情况下,实现全链路流量控制。 准

云安全中心的Serverless资产如何绑定微服务应用(邀测) 2025-04-17 10:59

云安全中心的Serverless资产绑定微服务应用后,云安全中心可对微服务应用进行漏洞扫描、入侵检测和基线检查,极大提升应用安全的同时也优化了成本效益,为SAE应用构筑坚实的安全防线。本文

使用SAE部署Nginx服务 2025-04-17 10:59

Nginx可以用于搭建静态网站,也可以实现反向代理(将客户端的请求转发到其他后端应用)。本文将指引您使用SAE部署Nginx服务。 方案概览 如下图所示,Nginx能够根据客户端请求的路径,返回应用自身包含的静态资源(如HTML页面),或者将请求转发到其他后端应用,并将处理结果返回给客户端。

目录
Copyright © 2025 your company All Rights Reserved. Powered by 赛尔网络.
京ICP备14022346号-15
gongan beian 京公网安备11010802041014号