Rabbit MQ 使用 HTTPAPI 发送消息

作者:郑德鼎 约 9 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:Data Engineering, 数据工程
Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图
Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图

##### ** 1\. 什么是RabbitMQ? **

RabbitMQ 是一个由 Erlang 语言开发的 AMQP 的开源实现。

AMQP :Advanced Message

Queue,高级消息队列协议。它是应用层协议的一个开放标准,为面向消息的中间件设计,基于此协议的客户端与消息中间件可传递消息,并不受产品、开发语言等条件的限制。

消息队列在实际应用中常用的使用场景:异步处理,应用解耦,流量削锋和消息通讯四个场景。

RabbitMQ整体上是一个生产者与消费者模型,主要负责接收、存储和转发消息。可以把消息传递的过程想象成:当你将一个包裹送到邮局,邮局会暂存并最终将邮件通过邮递员送到收件人的手上,RabbitMQ就好比由邮局、邮箱和邮递员组成的一个系统。从计算机术语层面来说,Rabbit

MQ模型更像是一种交换机模型。

RabbitMQ 的结构图

Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图
Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图

• Broker: 接收和分发消息的应用,我们日常所用的 RabbitMQ 就是一个 Message Broker。

• Virtual host: 出于多租户和安全因素设计的,把 AMQP 的基本组件划分到一个虚拟的分组中,类似于网络中的 namespace 概念。当多个不同的用户使用同一个 RabbitMQ 提供的服务时,可以划分出多个 vhost,每个用户在自己的 vhost 中创建 exchange/queue等。

• Connection: publisher/consumer 和 broker 之间的 TCP 连接,断开连接的操作只会在 client 端进行,Broker 不会断开连接,除非出现网络故障或 broker 服务出现问题。

• Channel: 如果每一次访问 RabbitMQ 都建立一个 Connection,在消息量大的时候建立 TCP Connection 的开销将是巨大的,效率也较低。Channel 是在 Connection 内部建立的逻辑连接,如果应用程序支持多线程,通常每个 Thread 创建单独的 Channel 进行通讯,AMQP method 包含了 Channel id 帮助客户端和 Message Broker 识别 Channel,所以 Channel 之间是完全隔离的。Channel 作为轻量级的 Connection 极大减少了操作系统建立 TCP Connection 的开销。

• Exchange: Message 到达 Broker 的第一站,根据分发规则,匹配查询表中的 routing key,分发消息到 queue 中去。常用的类型有:direct (点对点), topic(发布订阅) 以及 fanout (广播)。

• Queue: 消息最终被送到这里等待 Consumer 取走,一个 Message 可以被同时拷贝到多个 queue 中。

• Binding: Exchange 和 Queue 之间的虚拟连接,binding 中可以包含 routing key,Binding 信息被保存到 Exchange 中的查询表中,作为 Message 的分发依据。

这里的消息(Message)是指在应用间传递的数据,可以是文本字符串或者Json等,也可以非常复杂,比如内嵌对象。消息包含两部分,消息体(payload)和标签(label),在实际应用中,payload就是业务数据,可以是一个订单号,也可以是一个JSON字符串。消息的标签用来描述这个消息,比如虚拟机(Virtual

Host)交换机(Exchange)和路由键还有消息的类型。

消息传递过程可以理解为两个部分,首先生产者,也就是投递消息的一方将消息发布到RabbitMQ中的某个队列上,这时,消息的标签会被丢弃,存入到队列中的消息只有payload;然后消费者连接到RabbitMQ服务器,并订阅到队列上,当消费者消费一条消息时,只是消费消息的payload。

##### ** 如何在本地部署一个RabbitMQ? **

1.下载Erlang

访问Erlang官网(https://www.erlang.org),点击【Get Erlang/OPT 24】按钮,进入到下载页面。

Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图
Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图

在Erlang下载页面选择【Download Windows installer】-【Download 64-bit

Installer】选项,下载64位的Erlang安装包。

Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图
Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图

2.安装Erlang

双击otp_win64_24.3.3.exe安装包,今入选择组件窗口,保持选项默认,直接点击【Next】下一步。

Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图
Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图

在选择安装位置窗口,自定义Erlang安装配置。例如,安装在D:\ProgramSoftware\erl-24.3.3目录下。

Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图
Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图

在选择开始菜单文件夹窗口,保持默认,点击【Install】按钮进行安装。

Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图
Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图

等待Erlang的安装完成,整个安装过程可能需要持续三分钟左右。

Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图
Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图

安装完成后,点击【Close】按钮,关闭窗口。至此,Erlang语言包的安装完成。

Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图
Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图

3.配置Erlang

在【高级系统设置】-【环境变量】-【系统变量】选项下,创建ERLANG_HOME变量名,并对此变量名指定Erlang的安装路径作为变量值(注意:在安装Erlang语言包时,会在系统变量下会自动增加一个变量名为ERLANG_HOME的变量配置,它的配置路径是Erlang选择安装的具体路径,无须手动修改。如果此变量已自动生成,无需重复配置)。

Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图
Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图

双击【系统变量】-【Path】选项,在Path变量中添加Erlang安装目录下的bin配置。

Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图
Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图

4.检测Erlang

在开始菜单找到【Erlang】选项,点击启动Erlang;如果显示如下界面,则表示Erlang安装配置成功。

Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图
Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图

或者在【命令提示符】窗口,输入erl命令,查看Erlang版本号;再输入halt().退出erl命令操作。

Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图
Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图

5.下载RabbitMQ

访问RabbitMQ官网(http://rabbitmq.com),点击【Get Started】选项。

Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图
Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图

选择【Download + Installation】选项,进入RabbitMQ下载页面。

Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图
Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图

在该页面中可以选择

Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图
Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图

找到直接下载(Direct Downloads)选项,然后点击rabbitmq-sever-3.12.2.exe进行下载。

Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图
Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图

6安装RabbitMQ

双击rabbitmq-server-3.12.2.exe安装包,打开选择组件窗口,保持选项默认,直接点击【Next】下一步。

Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图
Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图

在选择安装位置窗口,自定义RabbitMQ安装配置。例如,安装在D:\ProgramSoftware\RabbitMQ

Server目录下。然后点击【Install】进行安装。

Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图
Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图

等待RabbitMQ的安装完成,整个安装过程可能需要持续三分钟左右。

Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图
Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图

安装完成后,点击【Next】按钮进入下一步操作。

Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图
Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图

完成RabbitMQ安装后,点击【Finish】按钮,完成操作。

Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图
Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图

6.配置RabbitMQ

在【高级系统设置】-【环境变量】-【系统变量】选项下,创建RABBITQM_SERVER变量名,并对此变量名指定RabbitMQ的安装路径作为变量值。

Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图
Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图

双击【系统变量】-【Path】选项,在Path变量中添加RabbitMQ安装目录下的sbin配置。

Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图
Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图

7.安装RabbitMQ-Plugins

打开命令行cd,输入RabbitMQ的sbin目录。输入以下命令进行安装。

Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图
Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图

输入命令rabbitmqctl status查看状态,说明安装成功

Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图
Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图

.8.启动RabbitMQ管理插件

Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图
Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图

在RabbitMQ安装的宿主机上通过浏览器访问http://localhost:15672地址,查看RabbitMQ的相关信息。

Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图
Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图

首次登录RabitMQ可视化管理页面时需要进行用户登录,RabbitMQ安装过程中默认提供了用户名和密码均为guest的用户,可以使用该账户进行登录。登录成功后会进入RabbitMQ可视化管理页面的首页。

Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图
Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图

最上侧的导航依次是:概览、连接、信道、交换器、队列、用户管理

##### 如何使用HTTP API向RabbitMQ发送消息

1.获取url和报文格式

新建Virtual host,exchange,queue并建立连接

Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图
Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图

推送数据

Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图
Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图

查看控制台,获取到他的URL,标头和请求报文

Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图
Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图
Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图
Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图

POSTAMAN调用,调用成功

Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图
Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图

我们现在查看RabbitMQ,发现这个队列有两条消息

Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图
Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图
Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图
Rabbit MQ 使用 HTTPAPI 发送消息 - 封面图

2.ABAP代码

FUNCTION zfj_json_mq_convert.*"----------------------------------------------------------------------*"*"本地接口:*" IMPORTING*" VALUE(PA

...

郑德鼎

关于作者:郑德鼎

企业信息化与 SAP 技术顾问,长期专注 SAP ABAP、FI/CO、MM、SD 等模块的技术分享与实战经验总结。查看更多介绍

来源说明:本文内容由「RabbitMQ使用HTTPAPI发送消息.md」整理生成,仅用于内部技术分享与学习交流。