EventBridge消息路由|高效构建消息路由能力
简介:企业数字化转型过程中,天然会遇到消息路由,异地多活,协议适配,消息备份等场景。本篇主要通过 EventBridge 消息路由的应用场景和应用实验介绍,帮助大家了解如何通过 EventBridge 的消息路由高效构建消息路由能力。
作者:肯梦
企业数字化转型过程中,天然会遇到消息路由,异地多活,协议适配,消息备份等场景。本篇主要通过 EventBridge 消息路由的应用场景和应用实验介绍,帮助大家了解如何通过 EventBridge 的消息路由高效构建消息路由能力。
背景知识
EventBridge 消息路由主要涉及以下云产品和服务:
- 事件总线 EventBridge
事件总线 EventBridge 是阿里云提供的一款无服务器事件总线服务,支持阿里云服务、自定义应用、SaaS 应用以标准化、中心化的方式接入,并能够以标准化的 CloudEvents 1.0 协议在这些应用之间路由事件,帮助您轻松构建松耦合、分布式的事件驱动架构。
- 消息队列 RabbitMQ 版
阿里云消息队列 RabbitMQ 版支持 AMQP 协议,完全兼容 RabbitMQ 开源生态以及多语言客户端,打造分布式、高吞吐、低延迟、高可扩展的云消息服务。开箱即用,用户无需部署免运维,轻松实现快速上云,阿里云提供全托管服务,更专业、更可靠、更安全。
- 消息队列 MNS 版
阿里云消息服务 MNS 版是一款高效、可靠、安全、便捷、可弹性扩展的分布式消息通知服务。MNS 能够帮助应用开发者在他们应用的分布式组件上自由的传递数据、通知消息,构建松耦合系统。
场景应用
EventBridge 消息路由功能在构建在构建消息系统过程中主要应用于下面三个场景,一是消息路由场景,二是消息多活场景,三是多协议适配场景,下面对这三个场景进行简要介绍。
消息路由场景
该场景是指希望对消息进行二次分发,通过简单过滤或者筛选将消息分发到其他 Topic 或跨地域 Topic,实现消息共享 & 消息脱敏的场景。
通过一层转发将消息分发给不同的 Topic 消费,是消息路由的核心能力。随着企业转型遇到消息拆分且做业务脱敏的场景会越来越多。如下图是一个较为典型的路由分流场景。
消息多活场景
消息多活场景指每个数据中心均部署了完整、独立的 MQ 集群。数据中心内的应用服务只连接本地的 MQ 集群,不连接其他单元的 MQ 集群。MQ 集群中包含的消息路由模块,负责在不同单元 MQ 集群之间同步指定主题的消息。
根据应用服务是否具有单元化能力,可分为中心服务和单元服务两类。中心服务只在一个数据中心提供服务;单元服务在各个数据中心都提供服务,但只负责符合规则的部分用户,而非全量用户。
所有部署了单元服务的数据中心都是一个单元,所有单元的单元服务同时对外提供服务,从而形成一个异地多活架构或者叫单元化架构。通过多活管控平台可动态调整各个单元服务负责的流量。
多协议适配场景
随着业务团队的逐渐庞大,对消息的建设诉求与日俱增,由于部门技术栈的不同会导致部门间的消息协议也不尽相同。多协议适配是指用一种消息协议平滑迁移到多种消息协议的能力。
架构描述
使用 EventBridge 的事件流能力做消息路由,事件流模型是 EventBridge 在消息领域主打的处理模型,适用标准 Streaming(1:1)流式处理场景,无总线概念。用于端到端的消息路由,消息转储,消息同步及处理等,帮助开发者轻松构建云上数据管道服务。
下面的架构展示了如何通过桥接 EventBridge 实现 MNS 消息路由至 RabbitMQ Queues,MNS Queues。(A/B 链路任选其一进行试验)
应用实验
目标
通过本实验教程的操作,您可以通过阿里云控制台,在事件总线控制台中创建消息路由服务,在 EventBridge 控制台实现消息路由与简单的消息脱敏。
体验此实验后,可以掌握的知识有:
- 创建消息路由任务;
- 创建 RabbitMQ 实例、MNS 实例与简单的消息发送。
资源
使用到的资源如下:(本次实验资源遵循最小原则,使用满足场景需求的最小化资源)
- 资源一:EventBridge 事件总线
- 资源二:阿里云消息队列 RabbitMQ 版
- 资源三:阿里云消息队列 MNS 版
步骤
1)创建 MNS 资源
本实验分 A /B 两个可选场景:
A 、场景通过 MNS Queues1 投递至 MNS Queues2
B 、场景通过 MNS Queues1 投递至 RabbitMQ Queues
可根据兴趣选择不同场景。
本步骤将指导您如何通过控制台创建消息队列 MNS 版。
使用您自己的阿里云账号登录阿里云控制台,然后访问消息队列MNS版控制台。[1]
在控制台左边导航栏中,单击队列列表。(资源地域为同地域即可,本次引导默认选杭州)
在列表页面,单击创建队列并填写名称信息“test-mns-q”
创建完成后点击“详情”
找到 MNS 公网接入点信息,并记住该信息,后续实验会用到。
E.g.http://1825725063814405.mns.cn-hangzhou.aliyuncs.com
注意:重复如上步骤即可创建 A 实验链路的 “test-mns-q2”
2)创建 RabbitMQ 资源(B 实验可选)
本步骤将指导您如何通过控制台创建消息队列 RabbitMQ 版。
使用您自己的阿里云账号登录阿里云控制台,然后访问消息队列RabbitMQ版控制台。[2]
在控制台左边导航栏中,单击实例列表。(资源地域为同地域即可,本次引导默认选杭州)
在列表页面,单击创建实例,并完成创建。
创建完成后点击详情进入实例详情页;
在“Vhost 列表” 创建 “test-amqp-v”;
在“Queue 列表” ,选择 Vhost 为“test-amqp-v”,并创建 “test-amqp-q”;
3)创建 EventBridge 事件流任务 - MNS TO MNS(A 实验可选)
本步骤将指导您如何通过控制台创建 EventBridge 事件流。
使用您自己的阿里云账号登录阿里云控制台,然后访问 EventBridge 控制台。[3]
注:第一次使用需开通。
单击“事件流”列表,并在列表创建任务 (资源地域为同地域即可,本次引导默认选杭州)
创建事件流名称为“test-amqp-mns2mns”,点击下一步;
指定事件源,事件提供方为“消息服务 MNS”,队列名称为“test-mns-q”,点击下一步;
指定规则,规则部分可不做筛选,默认匹配全部,直接点击下一步;
注意:规则内容可根据需求自行指定,为降低难度本次实验默认投递全部,更多详情请查阅:
服务类型选择“消息服务 MNS”,队列名称选择“test-mns-q2”,消息内容选择“部分事件”,点击创建
注意:消息内容可根据需求自行指定,本次实验默认投递 data 字段,更多详情请查阅:
事件内容转换 - 事件总线EventBridge - 阿里云
创建完成后,可点击“启动”来启动事件流
4)创建 EventBridge 事件流任务 - MNS TO RabbitMQ(B 实验可选)
本步骤将指导您如何通过控制台创建 EventBridge 事件流。
使用您自己的阿里云账号登录阿里云控制台,然后访问 EventBridge 控制台。[3]注:第一次使用需开通。
单击“事件流”列表,并在列表创建任务 (资源地域为同地域即可,本次引导默认选杭州)
创建事件流名称为“test-amqp-mns2rabbitmq”,点击下一步
指定事件源,事件提供方为“消息服务 MNS”,队列名称为“test-mns-q”,点击下一步
指定规则,规则部分可不做筛选,默认匹配全部,直接点击下一步
注意:规则内容可根据需求自行指定,为降低难度本次实验默认投递全部,更多详情请查阅:
服务类型选择“消息队列 RabbitMQ 版本”,具体配置如下,点击创建
实例ID:选择创建好的RabbitMQ ID
Vhost:选择“test-amqp-v”
目标类型:选择“Queue”
Queue:选择“test-amqp-q”
Body:选择“部分事件”,填写“$.data”
MessageId:选择“常量”,填写“0”
Properties:选择“部分事件”,填写“$.source”
注意:消息内容可根据需求自行指定,本次实验默认投递 data 字段,更多详情请查阅:
事件内容转换 - 事件总线EventBridge - 阿里云
创建完成后,可点击“启动”来启动事件流
5)验证路由任务
向 MNS Source “test-mns-q ” 发送实验消息
点击下载 MNS SDK[4]
修改 sample.cfg
在 “sample.cfg ” 填写 AccessKeyId,AccessKeySecret,Endpoint 等信息
AccessKeyId,AccessKeySecret 可在阿里云 RAM 控制台[5]创建
Endpoint 即步骤 1 , MNS 公网接入点地址

AccessKeyId = LTAI5t96yU2S2E84BYsNNQ33
AccessKeySecret = xxxxxxx
Endpoint = http://1825725063814405.mns.cn-hangzhou.aliyuncs.com
填完效果如下,保存
找到 sample 目录的“sendmessage.py” 示例
将循环参数调整为 200,并保存 (可选)
保存并运行 “python sendmessage.py test-mns-q”
python sendmessage.py test-mns-q
在事件流控制台[6],分别点开 “test-mns-q2”, “test-amqp-q” 查看详情转储详情。
注意:MNS Q 仅支持单订阅,不支持广播模式。故该测试需要将 MNS/RabbitMQ 两个实验,任选其一关停后进行实验。
如需广播模式,请创建 MNS Topic 资源。
A 链路实验结果:
B 链路实验结果:
优势及总结
EventBridge 事件流提供端到端的消息路由能力,通过简单配置即可完成消息分发,消息同步,跨地域消息备份,跨产品消息同步等能力。具有运维简单,成本低,效率高,使用稳定等优势。同时使用 EventBridge 可以实现基础的数据过滤,数据脱敏等数据处理类能力。是消息路由场景下运维成本最低的解决方案。
本文为阿里云原创内容,未经允许不得转载。
EventBridge消息路由|高效构建消息路由能力的更多相关文章
- Spring Cloud Alibaba学习笔记(12) - 使用Spring Cloud Stream 构建消息驱动微服务
什么是Spring Cloud Stream 一个用于构建消息驱动的微服务的框架 应用程序通过 inputs 或者 outputs 来与 Spring Cloud Stream 中binder 交互, ...
- RabbitMQ之路由键转发消息
RabbitMQ学习 参考:https://www.jianshu.com/p/6b62a0ed2491 消息队列:目前流行的有 Kafka.RabbitMQ.ActiveMQ等 功能:为了解决消息的 ...
- App设计:消息推送和界面路由跳转
概要 app消息推送.显示通知栏,点击跳转页面是很一般的功能了,下面以个推为例演示push集成,消息处理模块及app内部路由模块的简单设计. 推送 推送sdk集成 集成sdk步骤根据文档一步步做就行了 ...
- RabbitMQ系列二(构建消息队列)
从AMQP协议可以看出,MessageQueue.Exchange和Binding构成了AMQP协议的核心.下面我们就围绕这三个主要组件,从应用使用的角度全面的介绍如何利用RabbitMQ构建消息队列 ...
- 使用 Spring Cloud Stream 构建消息驱动微服务
相关源码: spring cloud demo 微服务的目的: 松耦合 事件驱动的优势:高度解耦 Spring Cloud Stream 的几个概念 Spring Cloud Stream is a ...
- 一步步构建iOS路由
什么是移动端路由层: 路由层的概念在服务端是指url请求的分层解析,将一个请求分发到对应的应用处理程序.移动端的路由层指的是将诸如App内页面访问.H5与App访问的访问请求和App间的访问请求,进行 ...
- RabbitMQ和Kafka,更加便捷高效的消息队列使用方式,请放心食用
一.RabbitMQ实例介绍RabbitMQ实例由华为云分布式消息服务(DMS)团队打造,实例采用物理隔离的方式部署,租户独占RabbitMQ实例.一键式部署,完全兼容开源RabbitMQ的使用方式, ...
- 18-Node.js学习笔记-Express-请求处理-构建模块化路由
构建模块化路由 const express = require('express') //创建路由对象 const home = express.Router(); //将路由和请求路径进行匹配 ap ...
- 「 从0到1学习微服务SpringCloud 」08 构建消息驱动微服务的框架 Spring Cloud Stream
系列文章(更新ing): 「 从0到1学习微服务SpringCloud 」01 一起来学呀! 「 从0到1学习微服务SpringCloud 」02 Eureka服务注册与发现 「 从0到1学习微服务S ...
- 华为视频编辑服务(Video Editor Kit),助力开发者高效构建应用视频编辑能力
视频编辑服务(Video Editor Kit)是华为开放给开发者快速构建视频编辑能力的服务,提供视频导入.编辑处理.特效渲染.视频导出.媒体资源管理等一站式视频处理能力.视频编辑服务为全球开发者提供 ...
随机推荐
- oracle错误之未知的命令开头imp忽略了剩余行解决方案
现象:执行imp命令如下: imp username/password@orcl full=y file=C:\optimove.dmp ignore=y 解决方案: imp 命令是在dos提示符 ...
- SnapHelper源码深度解析
目录介绍 01.SnapHelper简单介绍 1.1 SnapHelper作用 1.2 SnapHelper类分析 1.3 LinearSnapHelper类分析 1.4 PagerSnapHelpe ...
- Advanced .Net Debugging 5:基本调试任务(线程的操作、代码审查、CLR内部的命令、诊断命令和崩溃转储文件)
一.介绍 这是我的<Advanced .Net Debugging>这个系列的第五篇文章.今天这篇文章的标题虽然叫做"基本调试任务",但是这章的内容还是挺多的.上一篇我 ...
- 开源一个教学型分库分表示例项目 shardingsphere-jdbc-demo
在笔者心中,消息队列,缓存,分库分表是高并发解决方案三剑客. 分库分表之所以被广泛使用,因为工程相对简单,但分库分表并不仅仅是分片,还是需要考虑如何扩缩容(全量同步.增量同步.数据校验等). 因此笔者 ...
- 任何样式,javascript都可以操作,让你所向披靡
前言 习惯了在 css 文件里面编写样式,其实JavaScript 的 CSS对象模型也提供了强大的样式操作能力, 那就随文章一起看看,有多少能力是你不知道的吧. 样式来源 客从八方来, 样式呢, 样 ...
- vivo 消息中间件测试环境项目多版本实践
作者:vivo 互联网中间件团队 - Liu Tao 在开源 RocketMQ 基础之上,关于[测试环境项目多版本隔离]业务诉求的落地与实践. 一.背景 在2022年8月份 vivo 互联网中间件团队 ...
- 可变形卷积系列(三) Deformable Kernels,创意满满的可变形卷积核 | ICLR 2020
论文提出可变形卷积核(DK)来自适应有效感受域,每次进行卷积操作时都从原卷积中采样出新卷积,是一种新颖的可变形卷积的形式,从实验来看,是之前方法的一种有力的补充. 来源:晓飞的算法工程笔记 公众号 ...
- KingbaseES自动生成列介绍
在KingbaseES中create table语句支持GENERATED column(生成列). 生成列是一种特别的列类型,它的值基于其他列的值计算得出.因此,生成列之于列,有点像视图之于表的关系 ...
- KingbaseES V8R6运维案例之---MySQL和KingbaseES字符串排序规则对比
案例说明: 相同数据排序后查询,在MySQL和KingbaseES下得到的排序顺序不一致,本案例从MySQL和KingbaseES的排序规则分析,两种数据库排序的异同点. 适用版本: Kingbase ...
- KingabseES-SQL优化_提升子查询
什么是提升子查询/子链接 SubLink,子查询/子链接,他们的区别:子查询不在表达式中子句,子链接在in/exists表达式中的子句. 若以范围表的方式存在,则是子查询: 若以表达式的存在,则是子连 ...