作者:肯梦

企业数字化转型过程中,天然会遇到消息路由,异地多活,协议适配,消息备份等场景。本篇主要通过 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”,点击下一步;

指定规则,规则部分可不做筛选,默认匹配全部,直接点击下一步;

​注意:规则内容可根据需求自行指定,为降低难度本次实验默认投递全部,更多详情请查阅:​

​​​​https://help.aliyun.com/document_detail/181432.html​​​​​​

服务类型选择“消息服务 MNS”,队列名称选择“test-mns-q2”,消息内容选择“部分事件”,点击创建

​注意:消息内容可根据需求自行指定,本次实验默认投递 data 字段,更多详情请查阅:​

​​​https://help.aliyun.com/document_detail/181429.html​​​​​

创建完成后,可点击“启动”来启动事件流

4)创建 EventBridge 事件流任务 - MNS TO RabbitMQ(B 实验可选)

本步骤将指导您如何通过控制台创建 EventBridge 事件流。

使用您自己的阿里云账号登录阿里云控制台,然后访问 EventBridge 控制台。 [3] 注:第一次使用需开通。

单击“事件流”列表,并在列表创建任务 (资源地域为同地域即可,本次引导默认选杭州)

创建事件流名称为“test-amqp-mns2rabbitmq”,点击下一步

指定事件源,事件提供方为“消息服务 MNS”,队列名称为“test-mns-q”,点击下一步

指定规则,规则部分可不做筛选,默认匹配全部,直接点击下一步

​注意:规则内容可根据需求自行指定,为降低难度本次实验默认投递全部,更多详情请查阅:

​​​​https://help.aliyun.com/document_detail/181432.html​​​​

服务类型选择“消息队列 RabbitMQ 版本”,具体配置如下,点击创建

实例ID:选择创建好的RabbitMQ ID
Vhost:选择“test-amqp-v”
目标类型:选择“Queue”
Queue:选择“test-amqp-q”
Body:选择“部分事件”,填写“$.data”
MessageId:选择“常量”,填写“0”
Properties:选择“部分事件”,填写“$.source”

​注意:消息内容可根据需求自行指定,本次实验默认投递 data 字段,更多详情请查阅:

​​​​https://help.aliyun.com/document_detail/181429.html​​​​

创建完成后,可点击“启动”来启动事件流

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 可以实现基础的数据过滤,数据脱敏等数据处理类能力。是消息路由场景下运维成本最低的解决方案。

相关链接

​[1] 消息队列MNS版控制台

https://mns.console.aliyun.com/accounttraceid=a42e9ca8e911475087856852d4526c4dsjeq

[2] 消息队列RabbitMQ版控制台

https://amqp.console.aliyun.com/

[3] EventBridge 控制台

https://eventbridge.console.aliyun.com/overview

[4] 点击下载 MNS SDK

https://aliware-images.oss-cn-hangzhou.aliyuncs.com/mns/sdk/python/aliyun-mns-python-sdk-1.1.6.zip?spm=a2c4g.11186623.0.0.516e7538twGvPp&file=aliyun-mns-python-sdk-1.1.6.zip

[5] 阿里云RAM 控制台

https://ram.console.aliyun.com/manage/ak

[6] 事件流控制台

(https://eventbridge.console.aliyun.com/cn-hangzhou/event-streamings)​

点击文末 “ ​​此处​​​ ”,进入阿里云 EventBridge 官网,了解更多详情~

EventBridge消息路由|高效构建消息路由能力相关推荐

  1. python 路由转发_RabbitMQ之路由键转发消息

    RabbitMQ学习 消息队列:目前流行的有 Kafka.RabbitMQ.ActiveMQ等 功能:为了解决消息的分布式消费,完成项目.服务之间的解耦动作.消息的生产者与消费者之间完全采用异步通信方 ...

  2. RabbitMQ之路由键转发消息

    消息队列:目前流行的有 Kafka.RabbitMQ.ActiveMQ等 功能:为了解决消息的分布式消费,完成项目.服务之间的解耦动作.消息的生产者与消费者之间完全采用异步通信方式,极大的提高了系统的 ...

  3. RabbitMQ VS Apache Kafka (五)—— RabbitMQ路由拓扑与消息模式

    本章我们讨论RabbitMQ的消息模式与路由拓扑,主要涉及以下知识点: 交换器类型与绑定关系 消息队列 死信交换器 即时交换器与队列 备用交换器 优先级队列 交换器类型 1. 扇出交换器 扇出交换器提 ...

  4. RabbitMQ:高效传递消息的魔法棒,一篇带你助力构建可靠的分布式系统(上篇)

    目录 一 什么是MQ 1.1 MQ的概念 1.2 MQ的流量消峰 1.3 MQ的应用解耦 1.4 MQ的异步处理 1.5 MQ的分类以及如何选择 1.5.1 ActiveMQ 1.5.2 Apache ...

  5. 大搜车:云上多地域高可用消息系统的构建

    汽车产业互联网平台大搜车由姚军红创立于2012年12月,先后获得阿里巴巴集团.蚂蚁金服.晨兴资本.华平投资.春华资本等机构超过12亿美元融资.2017年12月,大搜车列入由硅谷全球数据研究机构Pitc ...

  6. 监控组件_分布式监控组件Cat,如何实现万亿级消息的高效存储?

    CAT(Central Application Tracking),是基于 Java 开发的分布式实时监控系统.CAT 目前在美团点评的产品定位是应用层的统一监控组件,在中间件(RPC.数据库.缓存. ...

  7. 路由ssr服务器信息不完整,基于Nuxt构建动态路由SSR服务

    大约两年前曾经分享过基于Vue的SSR框架Nuxt的简单使用<基于Vue.js的SSR方案之Nuxt.js>,今天因为有SSR需求又重新做了一些尝试. 由于目前在做的是一个能够动态构建页面 ...

  8. iOS路由设计(三)带你一步步构建iOS路由

    http://www.jianshu.com/p/3a902f274a3d 接上一篇移动端路由层设计,这一篇是实战篇,手把手的带你编写一个简单的路由组件.有朋友说很多人都收藏以后就再也没看过,其实这属 ...

  9. 计算机网络 直连网,计算机网络基础及局域网构建 静态路由和直连路由 静态路由和直连路由.doc...

    C语言程序设计教案 PAGE PAGE 3 交换机.路由器的安装与调试 第8单元 直连路由和静态路由 授课内容:直连路由和静态路由 学时:2学时(90分钟) 教学目的和要求: 通过ip路由原理的学习, ...

最新文章

  1. shell sed过滤器详解
  2. md5碰撞Java_java现在MD5加密不安全了吗?
  3. 1266: [AHOI2006]上学路线route
  4. 在 Ubuntu 环境下实现插入鼠标自动关闭触摸板
  5. Effective Java~38. 用接口模拟可扩展的enum
  6. python分类器鸢尾花怎么写_python机器学习基础教程:鸢尾花分类
  7. Java 蓝桥杯 字符串基本用法
  8. Hibernate-面试题
  9. oracle 查看 统计更新时间,oracle查看和更新统计表的信息
  10. 语句乎?表达式乎?(Python/C)
  11. 快速上手,定制第一个WES8镜像
  12. selenium提示geckodriver‘ execut解决办法
  13. [ffmpeg] 视频码率压缩
  14. Transformer模型简介
  15. 计算机无法计算,计算机无法计算到的F1最后一步
  16. 武钢四中2021高考成绩查询,武汉市钢城四中怎么样 钢城四中介绍
  17. 数据库系统管理(选择 记录)
  18. 「win10右键菜单修改名称」
  19. JAVA导出EXCEL实现
  20. Windows程序设计设计第一个窗口

热门文章

  1. 2020-12-7(字节,半字,字,双字总结)
  2. 【网络安全】文件上传绕过思路总结
  3. C语言读入文件全部内容的方法
  4. 【Apache 】 遇到的问题
  5. 1135 Is It A Red-Black Tree (30 分)【难度: 难 / 知识点: 红黑树 未完成】
  6. 项目: 用easyx实现消砖块
  7. 接口自动化-发送get请求-1
  8. Select控件可选可输入
  9. easyUI的中文乱码问题
  10. 返回值类型有哪些_关于类型的思考