利用消息中间件RabbitMQ创建队列以及扇出(Fanout)、订阅(Direct)、主题(Topic)交换机来完成消息的发送和监听接收

本文详细介绍了如何在RabbitMQ中使用Python的pika库创建队列,配置Fanout、Direct和Topic三种交换机,并演示了消息的发送和接收过程。
摘要由CSDN通过智能技术生成

要在RabbitMQ中创建队列并配置不同的交换机类型(Fanout、Direct、Topic)以实现消息的发送和监听接收,首先需要安装并启动RabbitMQ服务,然后可以通过编程接口(如AMQP协议)或管理界面来进行设置。以下是通过编程方式(这里以Python的pika库为例):

创建队列

Python

1import pika
2
3# 创建连接和通道
4connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
5channel = connection.channel()
6
7# 声明一个队列,如果不存在则创建
8queue_name = 'my_queue'
9channel.queue_declare(queue=queue_name)
10
11# 关闭连接
12connection.close()

创建并绑定交换机与队列

Fanout交换机

Fanout交换机会将消息广播给所有绑定到它的队列。

Python

1# 创建Fanout交换机并绑定到队列
2exchange_name = 'fanout_exchange'
3channel.exchange_declare(exchange=exchange_name, exchange_type='fanout')
4
5# 将队列绑定到Fanout交换机
6channel.queue_bind(exchange=exchange_name, queue=queue_name)
Direct交换机

Direct交换机根据routing_key精确匹配将消息路由到队列。

Python

1# 创建Direct交换机并绑定到队列
2exchange_name = 'direct_exchange'
3channel.exchange_declare(exchange=exchange_name, exchange_type='direct')
4
5# 将队列绑定到Direct交换机,假设我们有 routing_key='direct_key'
6channel.queue_bind(exchange=direct_exchange, queue=queue_name, routing_key='direct_key')
Topic交换机

Topic交换机根据routing_key的模式匹配将消息路由到队列。

Python

1# 创建Topic交换机并绑定到队列
2exchange_name = 'topic_exchange'
3channel.exchange_declare(exchange=exchange_name, exchange_type='topic')
4
5# 将队列绑定到Topic交换机,假设我们有 routing_key='*.log' 表示匹配包含.log的消息
6channel.queue_bind(exchange=topic_exchange, queue=queue_name, routing_key='*.log')

发送消息

Python

1def send_message(exchange_name, routing_key, message):
2    connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
3    channel = connection.channel()
4
5    # 声明交换机(若已存在则无须再次声明)
6    channel.exchange_declare(exchange=exchange_name, exchange_type='fanout'/'direct'/'topic')
7
8    # 发送消息
9    channel.basic_publish(exchange=exchange_name,
10                          routing_key=routing_key,
11                          body=message)
12
13    connection.close()
14
15# 示例发送
16send_message('fanout_exchange', '', 'Hello from Fanout!')
17send_message('direct_exchange', 'direct_key', 'Hello from Direct!')
18send_message('topic_exchange', '*.log', 'Hello from Topic!')

接收消息

Python

1def consume_messages(queue_name):
2    def callback(ch, method, properties, body):
3        print(" [x] Received %r" % body)
4
5    connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
6    channel = connection.channel()
7    
8    # 声明并确认队列(如果尚未声明)
9    channel.queue_declare(queue=queue_name)
10    
11    # 开始消费消息
12    channel.basic_consume(queue=queue_name,
13                          on_message_callback=callback,
14                          auto_ack=True)
15
16    print(' [*] Waiting for messages. To exit press CTRL+C')
17    channel.start_consuming()
18
19# 启动消费者监听指定队列
20consume_messages('my_queue')

以上代码展示了如何在RabbitMQ中创建队列并分别与不同类型的交换机绑定,以及如何发送和监听消息。在实际应用中,生产者和消费者通常会运行在不同的进程中或不同的服务器上。

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晨曦_子画

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值