rabbitmq推模式和拉模式区别及代码
时间: 2023-11-27 10:04:58 浏览: 236
RabbitMQ是一种消息队列中间件,支持推模式和拉模式两种消息传递方式。
推模式是指消息发送者将消息直接推送到队列中,之后消费者可以从队列中获取这些消息。推模式的优点是实时性好,消息可以立即被消费者获取,适用于对实时性要求较高的场景。推模式的缺点是消息发送者无法控制消息被哪些消费者获取,可能会导致浪费消息。
拉模式是指消费者主动从队列中拉取消息,消费者需要在队列中轮询,判断是否有消息需要被消费。拉模式的优点是可以控制消息被哪些消费者获取,避免消息浪费,适用于对消息精细控制的场景。拉模式的缺点是实时性差,需要消费者轮询队列,可能会出现消息延迟。
下面是RabbitMQ使用推模式和拉模式的示例代码:
推模式示例代码:
```
import pika
# 建立连接
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
# 声明队列
channel.queue_declare(queue='hello')
# 发送消息
channel.basic_publish(exchange='', routing_key='hello', body='Hello World!')
print(" [x] Sent 'Hello World!'")
# 关闭连接
connection.close()
```
拉模式示例代码:
```
import pika
# 建立连接
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
# 声明队列
channel.queue_declare(queue='hello')
# 定义回调函数
def callback(ch, method, properties, body):
print(" [x] Received %r" % body)
# 从队列中获取消息
channel.basic_consume(queue='hello', on_message_callback=callback, auto_ack=True)
print(' [*] Waiting for messages. To exit press CTRL+C')
channel.start_consuming()
```
在拉模式中,消费者需要定义一个回调函数callback,用于接收从队列中获取到的消息。之后调用basic_consume方法,指定需要从哪个队列中获取消息,并指定回调函数。最后调用start_consuming方法,开始从队列中获取消息,并调用回调函数进行处理。
阅读全文