前言
rabbitmqadmin
工具可以方便地管理 RabbitMQ 的资源,
包括创建交换机 Exchanges 、队列 Queues 、绑定 Bindings ,以及发布 Publish 和订阅 Subscribe 消息。
确保你已经下载并安装了 rabbitmqadmin
,并且 RabbitMQ 管理插件是启用的。你可以从 http://localhost:15672/cli/
下载 rabbitmqadmin
脚本:
wget http://localhost:15672/cli/rabbitmqadmin
chmod +x rabbitmqadmin
file rabbitmqadmin
mv rabbitmqadmin /usr/local/bin/
1. 创建 Topic Exchange
首先,我们创建一个名为 my_topic_exchange
的 topic
类型交换机。
rabbitmqadmin declare exchange --vhost=/ name=my_topic_exchange type=topic durable=true auto_delete=false
rabbitmqadmin list exchanges
2. 创建 Queue
接下来,创建两个队列:queue.logs.error
和 queue.logs.info
。我们将为不同的日志级别(如错误和信息)分别设置队列。
rabbitmqadmin declare queue --vhost=/ name=queue.logs.error durable=true auto_delete=false
rabbitmqadmin declare queue --vhost=/ name=queue.logs.info durable=true auto_delete=false
rabbitmqadmin list queues
3. 绑定 Queue 到 Exchange
现在,我们需要将队列绑定到交换机,并指定路由键(routing key)。对于 queue.logs.error
,我们只对带有 .error
后缀的消息感兴趣;而对于 queue.logs.info
,我们关注所有以 .info
结尾的消息。
rabbitmqadmin declare binding --vhost=/ source=my_topic_exchange destination=queue.logs.error routing_key="*.error"
rabbitmqadmin declare binding --vhost=/ source=my_topic_exchange destination=queue.logs.info routing_key="*.info"
rabbitmqadmin list bindings
这里使用了通配符 *
,表示匹配任意单个单词。如果你想更精确地控制,可以使用 #
来匹配零个或多个单词。
4. 发布消息
使用 publish
命令向 my_topic_exchange
发送消息。我们可以发送不同类型的消息来测试不同队列的行为。
发布一条错误日志消息
rabbitmqadmin publish --vhost=/ exchange=my_topic_exchange routing_key="app.error" payload='{"log": "This is an error message"}'
发布一条信息日志消息
rabbitmqadmin publish --vhost=/ exchange=my_topic_exchange routing_key="app.info" payload='{"log": "This is an info message"}'
5. 订阅并消费消息
为了消费消息,可以使用 get
命令从队列中获取消息。
注意,这是一次性的操作,即每条消息只会被取出一次。
如果希望持续监听消息,需要编写一个消费者程序或者使用其他工具如 amqp-cli
。
从 queue.logs.error
获取消息
rabbitmqadmin get --vhost=/ queue=queue.logs.error ackmode=ack_requeue_false
从 queue.logs.info
获取消息
rabbitmqadmin get --vhost=/ queue=queue.logs.info ackmode=ack_requeue_false
命令中的ack_requeue_false
表示一旦消息被取出后就不会再放回队列;如果设置为 true
,则消息会在处理后重新入队。
验证
通过访问 RabbitMQ 的 Web 管理界面 (http://localhost:15672
) 或者使用 rabbitmqadmin
查看交换机、队列的状态和消息情况。