首页常见问题正文

RabbitMQ有几种广播类型?

更新时间:2023-05-11 来源:黑马程序员 浏览量:

IT培训班

  RabbitMQ是一个功能强大的消息队列中间件,支持多种消息广播类型。常见的几种广播类型包括:Direct Exchange、Fanout Exchange、Topic Exchange 和 Headers Exchange。

  下面是一个基于Python的RabbitMQ代码演示,展示如何使用Fanout Exchange实现消息广播:

  首先,安装pika库:

pip install pika

  然后,创建一个名为broadcast.py的Python文件,代码如下:

import pika
import sys

# 建立连接
connection = pika.BlockingConnection(
    pika.ConnectionParameters(host='localhost'))
channel = connection.channel()

# 创建一个Fanout Exchange
channel.exchange_declare(exchange='logs', exchange_type='fanout')

# 构造消息内容
message = ' '.join(sys.argv[1:]) or "Hello World!"

# 发布消息到Exchange
channel.basic_publish(exchange='logs', routing_key='', body=message)

print(" [x] Sent %r" % message)

# 关闭连接
connection.close()

  在上面的代码中,我们首先建立了一个与RabbitMQ服务器的连接,并创建了一个名为logs的Fanout Exchange。然后,我们构造了一个消息内容,并将其发布到Exchange中。

  我们可以使用命令行运行此脚本,并在命令行参数中传递消息内容,例如:

python broadcast.py "This is a broadcast message."

  这样,RabbitMQ服务器将会广播这条消息给所有已经绑定到logs Exchange的队列。

  下面是一个基于Python的RabbitMQ代码演示,展示如何使用Topic Exchange实现消息广播:

import pika
import sys

# 建立连接
connection = pika.BlockingConnection(
    pika.ConnectionParameters(host='localhost'))
channel = connection.channel()

# 创建一个Topic Exchange
channel.exchange_declare(exchange='logs_topic', exchange_type='topic')

# 构造消息内容
message = ' '.join(sys.argv[2:]) or "Hello World!"
routing_key = sys.argv[1] if len(sys.argv) > 1 else 'anonymous.info'

# 发布消息到Exchange
channel.basic_publish(exchange='logs_topic', routing_key=routing_key, body=message)

print(" [x] Sent %r:%r" % (routing_key, message))

# 关闭连接
connection.close()

  在上面的代码中,我们创建了一个名为logs_topic的Topic Exchange,并构造了一个消息内容和一个routing key。routing key是一个用于匹配队列的关键字。在Topic Exchange中,routing key可以是一个由点号分隔的单词列表。例如,"stock.usd.nyse"是一个有效的routing key。

  我们可以使用命令行运行此脚本,并在命令行参数中传递routing key和消息内容,例如:

python broadcast_topic.py "anonymous.info" "This is a broadcast message."

  这样,RabbitMQ服务器将会广播这条消息给所有已经绑定到与该routing key匹配的logs_topic Exchange的队列。

分享到:
在线咨询 我要报名
和我们在线交谈!