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学习日志】综合自身使用的Python而言,最终选取RabbitMQ。其缺点从单纯的使用来考虑,可以忽略,毕竟不会对其进行改造扩展。
环境搭建 1. 安装rabbitmq
docker pull rabbitmq
2. 启动rabbitmq
docker run -d -p 8080:15672 -p 5672:5672 rabbitmq
3. 消息发送代码
# sent.py import pikarabbitmq_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.pyimport pikarabbitmq_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

    推荐阅读