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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 来源 RabbitMQ是用Erlang实现的一个高并发高可靠AMQP消息队列服务器。支持消息的持久化、事务、拥塞控...
    jiangmo阅读 10,399评论 2 34
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,881评论 18 139
  • http://liuxing.info/2017/06/30/Spring%20AMQP%E4%B8%AD%E6%...
    sherlock_6981阅读 15,991评论 2 11
  • 整体架构 部署步骤 基于 Docker 基本概念内存节点只保存状态到内存,例外情况是:持久的 queue 的内容将...
    mvictor阅读 12,779评论 5 30
  • 网上rabbitmq的学习日志非常丰富,官网文档也很完美,这里主要记录学习和部署过程中的一些记录。会按以下菜单进行...
    恐龙打酱油阅读 2,597评论 0 4