文章目录
1、场景简介
在本实验场景中,将创建一个云消息队列RabbitMQ版Serverless系列实例,使用RabbitMQ开源客户端生产和消费消息,再查看Dashboard上实例的指标变化,以及查看消息轨迹。
云消息队列RabbitMQ版
-
云消息队列 RabbitMQ 版是一款基于高可用分布式存储架构实现的 AMQP 0-9-1 协议的消息产品,能够兼容开源 RabbitMQ 客户端。与开源 RabbitMQ 相比,能够解决各种稳定性痛点(例如消息堆积、脑裂等问题),同时具备高并发、分布式、灵活扩缩容等云消息服务优势。
-
云消息队列 RabbitMQ 版 Serverless 系列实例能力和预付费系列的企业版能力一样,但 Serverless 系列实例具有更高的弹性上限,且是按量后付费的计费方式,无需提前预留资源,按照实际使用量收费,助您降本增效。
-
云消息队列 RabbitMQ 版 Serverless 系列实例支持根据实际使用的资源量按量后付费,您可以弹性使用资源,无需提前预留。
(实验总费用不超过0.5元(包含收发消息次数25万次))
2、实验架构和流程
2.1、实验架构
消息在云消息队列 RabbitMQ 版的组件之间流动的过程如下:
- 生产者向Exchange发送消息。
- Exchange根据消息属性将消息路由到Queue进行存储。
- 消费者从Queue拉取消息进行消费。
2.2、实验流程
本实验流程可参考云消息队列RabbitMQ版进行消息收发的基本操作流程,如下图所示。但为了保证您能顺利完成本实验,请按照实验手册进行具体操作。
前提条件:
开通阿里云账号,已通过实名认证并且账户余额大于100,开通使用云消息队列RabbitMQ版Serverless系列实例(实验总费用不超过0.5元(包含收发消息次数25万次))。
3、创建实验资源
- 在实验页面,勾选我已阅读并同意《阿里云云起实践平台服务协议》和我已授权阿里云云起实践平台创建、读取及释放实操相关资源后,单击开始实操。
- 创建资源需要5分钟左右的时间,请您耐心等待。
- 在云产品资源列表,您可以查看本场景涉及的云产品资源信息
创建消息队列rabbitmq实例成功!
4、创建阿里云AccessKey
- 前往AccessKey管理。
- 在安全提示对话框,阅读安全提示信息,然后单击继续使用AccessKey。
- 在AccessKey页面,单击创建AccessKey。
- 根据界面提示完成安全验证。
- 在创建AccessKey对话框,查看AccessKey ID和AccessKey Secret。
您可以单击下载CSV文件,下载AccessKey信息。单击复制,复制AccessKey信息。
- 选中我已保存好AccessKey Secret。
- 单击确定。
5、创建静态用户名密码
在创建用户名密码面板,填写上一步创建的AccessKey ID和AccessKey Secret,单击确定。
返回如下页面,您可查看到创建的用户名和密码。
6、创建Vhost、Exchange、Queue并绑定关系
6.1、Vhost 的作用
虚拟主机(Virtual Host),用作逻辑隔离,分别管理各自的Exchange、Queue和Binding,使得应用安全的运行在不同的Vhost实例上,相互之间不会干扰。一个实例下可以有多个Vhost,一个Vhost里面可以有若干个Exchange和Queue。生产者和消费者连接消息队列RabbitMQ版需要指定一个Vhost。
6.2、创建Vhost
6.3、Exchange 的作用
Exchange是消息队列RabbitMQ版的消息路由代理。生产者向消息队列RabbitMQ版发送消息时,不会直接将消息发送到Queue,而是先将消息发送到Exchange,由Exchange将消息路由到一个或多个Queue。Exchange根据Routing Key和Headers属性路由消息.
类型说明:
- Direct Exchange 根据 Routing Key 完全匹配的规则路由消息。Direct Exchange 适用于通过简单字符标识符区分消息的场景。Direct Exchange 常用于单播路由。
- Topic Exchange 根据 Routing Key 通配符匹配的规则路由消息。Topic Exchange 适用于通过通配符区分消息的场景。Topic Exchange常用于多播路由。例如,使用Topic Exchange分发有关于特定地理位置的数据。
- Fanout Exchange 忽略 Routing Key 的匹配规则将消息路由到所有与该 Exchange 定义过 Binding 的所有 Queue。Fanout Exchange 适用于广播消息的场景。例如,分发系统使用 Fanout Exchange 来广播各种状态和配置更新。
- Headers Exchange 可以被视为 Direct Exchange 的另一种表现形式。Headers Exchange 可以像 Direct Exchange 一样工作,不同之处在于 Headers Exchange 使用 Headers 属性代替 Routing Key 进行路由匹配。Headers Exchange 适用于通过多组 Headers 属性区分消息的场景。Headers Exchange 常用于多播路由。例如,涉及到分类或者标签的新闻更新。
- 消息队列RabbitMQ版还支持x-delayed-message Exchange。通过声明该类Exchange,您可以自定义消息的Header属性x-delay来指定消息延时投递的时间段,单位为毫秒。消息将在x-delay中定义的时间段后,根据被投递到对应的Queue。路由规则取决于x-delayed-type中指定的Exchange类型。
- x-consistent-hash:哈希取值 :RoutingKey / Header 值
6.4、创建Exchange
6.5、Queue 的作用
消息队列,存储消息的缓冲区,每个消息都会被投入到一个或多个Queue里。
6.6、创建Queue
6.7、创建Exchange和Queue的绑定关系
7、使用RabbitMQ开源客户端生产和消费消息
7.1 idea创建demo
- 打开IntelliJ IDEA,使用Git克隆RabbitMQ开源客户端demo项目。
首先需要检查确认已安装Git。若为安装Git,您可参考下方步骤进行安装。
在插件(Plugins)的Marketplace中,搜索GitToolBox,选中GitToolBox并单击右侧的安装(Install)。
- 在IntelliJ IDEA中,单击Get from Version Control。
在Get from Version Control面板,Version Control选择Git,URL填写项目远程仓库地址https://gitee.com/RongtongJin/amqp-java-demo.git,Directory选择任意一个本地文件夹或新建一个本地文件夹,单击Clone。
- Clone完成后进入项目,选择amqp-java-demo > src > main > java,双击Config.java文件,将代码中HOSTNAME、USERNAME、PASSWORD三个参数值替换为阿里云RabbitMQ实例的公网接入点、静态用户名和静态密码。
7.2 运行ProducerTest持续发送消息
在IntelliJ IDEA中,运行amqp-java-demo文件下的ProducerTest.java文件,持续发送消息。
7.3 运行ConsumerTest持续接收消息
在IntelliJ IDEA中,运行 amqp-java-demo文件下的ConsumerTest.java文件,持续接收消息。
7.4 查看消息收发记录
观察IntelliJ IDEA控制台打印的消息收发记录。
8、查看Dashboard的实例指标变化
返回消息队列RabbitMQ版控制台页签,在左侧导航栏中,单击Dashboard。