RabbitMQ Tutorials
link:
简介
- RabbitMQ是一个消息代理,接收和转发消息。
- 一些术语:
producer
: 向队列投递消息的一方称为生产者queue
: 队列是RabbitMQ内部的中转站,尽管消息通过RabbitMQ在应用之间流转,但是只能被存储在队列中。队列仅受限于服务器的内存和磁盘大小,本质上就是一个大的消息缓冲区。多个生产者可以向同一个队列投递消息,多个消费者也可以从同一个队列拉取消息consumer
: 从队列拉取消息的一方称为消费者- 生产者、消费者、代理(服务端)可以分布在不同的机器上,事实上很多情况下都是分布在不同的地方
Hello World
- 安装
- 推荐使用docker安装,
docker run -itd --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.7.18-management
- 推荐使用docker安装,
- 发送
# !/usr/bin/env python
# -*- coding: utf-8 -*-
"""
__title__ = ''
__author__ = 'wAIxi'
__date__ = '2020/8/21'
__description__ = doc description
"""
import pika
connection = pika.BlockingConnection(
pika.ConnectionParameters(
host="localhost",
credentials=pika.PlainCredentials(username="rxthinking", password="gniknihtxr")
)
)
channel = connection.channel()
channel.queue_declare(queue='demo', auto_delete=True)
channel.basic_publish(exchange='', routing_key="demo", body="hello world")
connection.close()
- 接收
# !/usr/bin/env python
# -*- coding: utf-8 -*-
"""
__title__ = ''
__author__ = 'wAIxi'
__date__ = '2020/8/21'
__description__ = doc description
"""
import pika
connection = pika.BlockingConnection(
pika.ConnectionParameters(
host="localhost",
credentials=pika.PlainCredentials(username="rxthinking", password="gniknihtxr")
)
)
channel = connection.channel()
channel.queue_declare(queue='demo', auto_delete=True)
def callback(ch, method, props, body):
print(f"get body: {body}")
channel.basic_consume(queue='demo', on_message_callback=callback, auto_ack=True)
channel.start_consuming()