竞品分析
消息队列 | 客户端语言 | 优点 | 缺点 |
---|---|---|---|
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
网友评论