Python运用RabbitMQ学习日志

竞品分析

消息队列 客户端语言 优点 缺点
RocketMQ Java、.NET、C++ 支持事务 客户端支持较少
Kafka Java 无限消息堆积、持久化速度快。 没有界面,不利于直观的消息监控。可靠性低,适用于日志等对数据可靠性低的场景。不支持分布式事务消息
RabbitMQ Java、Python、.Net、Ruby、PHP、C、C++、Go... 支持事务、客户端支持广泛、自带监控界面。 由小众语言编写、报错信息难以琢磨。

关于性能
以上三个消息队列各方面性能都比较客观,对于普通量级的业务而言,绝对够用,所以不对性能做详细对别。感兴趣的可以在这里查看网友作出的性能对比详情。https://blog.csdn.net/yunfeng482/article/details/72856762

最终选取

综合自身使用的Python而言,最终选取RabbitMQ。其缺点从单纯的使用来考虑,可以忽略,毕竟不会对其进行改造扩展。

环境搭建

1. 安装rabbitmq

docker pull rabbitmq

2. 启动rabbitmq

docker run -d -p 8080:15672 -p 5672:5672 rabbitmq

3. 消息发送代码

# sent.py
import pika


rabbitmq_host = "127.0.0.1"
rabbitmq_port = 5672
queue_name = "test_queue_name"

connection = pika.BlockingConnection(
    pika.ConnectionParameters(host=rabbitmq_host, port=rabbitmq_port)
)


channel = connection.channel()
channel.queue_declare(queue=queue_name)

channel.basic_publish(
    exchange='',
    routing_key=queue_name,
    body='hello word'
)
    
print("Sent 'Hello World!' to queue %s success" % queue_name)

connection.close()

4. 消息接收代码

# receive.py

import pika

rabbitmq_host = "127.0.0.1"
rabbitmq_port = 5672
queue_name = "test_queue_name"

connection = pika.BlockingConnection(
    pika.ConnectionParameters(host=rabbitmq_host, port=rabbitmq_port)
)

channel = connection.channel()

channel.queue_declare(queue=queue_name)

def received_msg_callback(ch, method, properties, body):
    print("Received msg '%r'" % body)

channel.basic_consume(received_msg_callback, queue=queue_name, no_ack=True)

print('Waiting for messages. To exit press CTRL+C')
channel.start_consuming()

5. 运行

python3 sent.py
python3 receive.py

你可能感兴趣的:(Python运用RabbitMQ学习日志)