RabbitMQ的Topic Exchange

1. 创建 Topic Exchange

RabbitMQ 的交换器主要通过 rabbitmqadmin 操作(推荐练习用)。

先确认有没有:

rabbitmqadmin --help

如果没有,需要开启管理插件:

rabbitmq-plugins enable rabbitmq_management

然后下载:

wget http://localhost:15672/cli/rabbitmqadmin

赋权:

chmod +x rabbitmqadmin

测试:

./rabbitmqadmin list exchanges


2. 创建 Topic Exchange

创建:

./rabbitmqadmin declare exchange \
name=topic.exchange \
type=topic \
durable=true

查看:

./rabbitmqadmin list exchanges

应该看到:

topic.exchange topic


3. 创建队列

创建订单队列:

./rabbitmqadmin declare queue \
name=order.queue \
durable=true

创建支付队列:

./rabbitmqadmin declare queue \
name=payment.queue \
durable=true

创建日志队列:

./rabbitmqadmin declare queue \
name=log.queue \
durable=true

查看:

./rabbitmqadmin list queues


4. 创建 Binding(重点)

order.queue 接收所有订单事件

绑定:

./rabbitmqadmin declare binding \
source=topic.exchange \
destination=order.queue \
routing_key="order.*"

意思:

order.created
order.paid
order.cancelled

都会进入 order.queue


payment.queue 只接收支付

./rabbitmqadmin declare binding \
source=topic.exchange \
destination=payment.queue \
routing_key="order.paid"


log.queue 接收全部消息

./rabbitmqadmin declare binding \
source=topic.exchange \
destination=log.queue \
routing_key="#"


5. 查看绑定关系

执行:

./rabbitmqadmin list bindings

你会看到:

topic.exchange -> order.queue     order.*
topic.exchange -> payment.queue   order.paid
topic.exchange -> log.queue       #


6. 发布消息测试

测试1:订单创建

发送:

./rabbitmqadmin publish \
exchange=topic.exchange \
routing_key=order.created \
payload="订单创建"

查看队列:

./rabbitmqadmin list queues

结果:

order.queue     1
log.queue       1
payment.queue   0

解释:

order.created

匹配:

order.*
#


测试2:支付成功

发送:

./rabbitmqadmin publish \
exchange=topic.exchange \
routing_key=order.paid \
payload="支付成功"

查看:

./rabbitmqadmin list queues

结果:

order.queue     2
payment.queue   1
log.queue       2


测试3:取消订单

发送:

./rabbitmqadmin publish \
exchange=topic.exchange \
routing_key=order.cancelled \
payload="订单取消"

结果:

order.queue     +1
log.queue       +1
payment.queue   不变


7. 消费消息查看内容

查看 order.queue:

./rabbitmqadmin get \
queue=order.queue \
ackmode=ack_requeue_false

输出类似:

订单创建
订单支付
订单取消

参数:

ackmode=ack_requeue_false

表示:

消费后删除消息。



8. 练习通配符

再创建:

./rabbitmqadmin declare queue \
name=user.queue

绑定:

./rabbitmqadmin declare binding \
source=topic.exchange \
destination=user.queue \
routing_key="user.#"

发送:

./rabbitmqadmin publish \
exchange=topic.exchange \
routing_key=user.login \
payload="用户登录"

发送:

./rabbitmqadmin publish \
exchange=topic.exchange \
routing_key=user.profile.update \
payload="修改资料"

查看:

./rabbitmqadmin get \
queue=user.queue \
ackmode=ack_requeue_false

两个都会收到。



9. 删除练习环境

如果想重新开始:

删除交换器:

./rabbitmqadmin delete exchange \
name=topic.exchange

删除队列:

./rabbitmqadmin delete queue \
name=order.queue


你现在只需要记住 Topic 的三个核心命令:

创建交换器
declare exchange

绑定队列
declare binding

发送消息
publish

学习 RabbitMQ 的顺序建议:

  1. ✅ Exchange 创建
  2. ✅ Queue 创建
  3. ✅ Binding 绑定
  4. ✅ publish 发送
  5. ✅ get 消费


文章标签:

评论(0)