📜  通过 HTTP API 在 RabbitMQ 中发送持久消息 (1)

📅  最后修改于: 2023-12-03 15:12:22.633000             🧑  作者: Mango

通过 HTTP API 在 RabbitMQ 中发送持久消息

RabbitMQ 是一个流行的开源消息代理,它支持多种协议,其中包括 HTTP API。通过 HTTP API,您可以在 RabbitMQ 中发送消息而不需要专门编写客户端代码。

本篇文章将介绍如何使用 RabbitMQ 的 HTTP API 来发送持久消息。

前置要求

在使用 RabbitMQ 的 HTTP API 发送消息之前,您需要完成以下步骤:

  • 安装 RabbitMQ
  • 启用 RabbitMQ 的管理插件
发送持久消息

要发送持久消息,您需要使用 HTTP POST 请求发送消息。请求必须携带以下信息:

  • 消息的内容
  • 交换机名称
  • 路由键

示例代码如下:

POST /api/exchanges/{vhost}/{exchange}/publish HTTP/1.1
Host: <rabbitmq-host>:<rabbitmq-port>
Authorization: Basic <base64-encoded-credentials>
Content-Type: application/json

{
  "properties": {
    "delivery_mode": 2
  },
  "routing_key": "<routing-key>",
  "payload": "<payload>",
  "payload_encoding": "string"
}
  • {vhost}: 消息要发送到的 virtual host 的名称
  • {exchange}: 交换机的名称
  • <base64-encoded-credentials>: Base64 编码的用户名和密码组成的字符串
  • <routing-key>: 消息要发送到的队列的路由键
  • <payload>: 消息的内容
  • delivery_mode: 设置为 2 表示此消息是持久化的,即使 RabbitMQ 重启后消息也不会丢失
  • payload_encoding: 消息内容的编码方式,默认为 string

以下是一份 Python 示例代码,使用 requests 库发送 POST 请求:

import requests
import json

payload = { 'some-key': 'some-value' }
headers = { 'content-type': 'application/json' }
auth = ('guest', 'guest') # 这里的用户名和密码是 RabbitMQ 的默认用户名和密码

url = 'http://<rabbitmq-host>:<rabbitmq-port>/api/exchanges/{vhost}/{exchange}/publish'.format(vhost='%2F',exchange='my-exchange') # 这里的 /%2F 表示根 virtual host
data = {
    'properties': {
        'delivery_mode': 2
    },
    'routing_key': 'my-queue',
    'payload': json.dumps(payload),
    'payload_encoding': 'string'
}

response = requests.post(url, headers=headers, data=json.dumps(data), auth=auth)

if response.status_code == 200:
    print('Message sent successfully')
else:
    print('Failed to send message')

此代码以一个 JSON 对象作为消息内容,将其发送到了 my-exchangemy-queue 队列。

结论

本篇文章介绍了如何使用 RabbitMQ 的 HTTP API 发送持久消息。使用 HTTP API 发送消息可以方便地跨平台和编程语言进行消息传递。当您需要在不同系统和编程语言之间实现消息传递时,HTTP API 是一种非常好的选择。