消息队列小白教程

消息队列小白教程 你是不是经常听到别人聊消息队列、RabbitMQ、Kafka 这些词但总觉得云里雾里别慌这篇教程就是给你这种新手写的。我不会跟你扯那些高大上的概念就用大白话告诉你消息队列是个啥、为啥要用它、RabbitMQ 和 Kafka 怎么选、怎么用。一、消息队列是个啥先说个生活中的例子。你去麦当劳点餐点完之后会拿到一个小票然后你不用站在柜台等着而是找个位置坐下等服务员叫号。这个小票加叫号其实就是消息队列的思想。在技术里消息队列Message Queue就是个中转站●A 系统产生了一条消息比如用户下单了●A 系统把消息扔到队列里不用管谁来处理●B 系统从队列里拿出消息自己慢慢处理●A 和 B 互不干扰想停哪个停哪个简单说消息队列就是个存消息的盒子生产者往里扔消费者从里拿两边互不认识也不用同时在线。二、为啥要用消息队列你可能会问我直接调用不行吗比如 A 系统直接调用 B 系统行但有几个问题解耦让系统之间别绑太紧如果 A 直接调用 B、C、D那 A 就得知道 B、C、D 的存在。哪天 B 改了接口A 也得跟着改。用了消息队列A 只管发消息B、C、D 自己订阅互不影响。异步让慢的别拖快的后腿用户下单后你可能需要扣库存、发短信、发邮件、记日志… 如果全部同步做用户得等好几秒。用了消息队列主流程扣库存做完就告诉用户下单成功其他事情扔给队列慢慢做。削峰应对突然的流量洪峰双十一零点每秒几万个订单进来你的数据库扛不住。用了消息队列可以把请求先存起来系统按照自己的节奏慢慢处理不会被冲垮。三、RabbitMQ 怎么玩RabbitMQ 是个传统型消息队列就像邮局一样你扔封信进去邮局帮你送到收件人手里。它稳定、易用适合大部分场景。核心概念记住这4个就够了●Producer生产者发消息的那方比如订单系统●Queue队列存消息的盒子消息在里面排队●Consumer消费者拿消息的那方比如库存系统●Exchange交换机负责把消息分到不同的队列就像邮局的分拣中心怎么安装超简单Windows 用户●去 RabbitMQ 官网下载安装包带 Erlang 的版本●双击安装一路 Next●安装完后访问 http://localhost:15672账号密码都是 guestMac 用户●brew install rabbitmq●brew services start rabbitmq怎么用Python 示例先装个库pip install pika发送消息生产者import pika连接 RabbitMQconnection pika.BlockingConnection(pika.ConnectionParameters(‘localhost’))channel connection.channel()创建一个队列叫 order_queuechannel.queue_declare(queue‘order_queue’)发送消息message “用户下单了订单号12345”channel.basic_publish(exchange‘’,routing_key‘order_queue’,bodymessage)print(“消息已发送”)connection.close()接收消息消费者import pika连接 RabbitMQconnection pika.BlockingConnection(pika.ConnectionParameters(‘localhost’))channel connection.channel()声明队列确保存在channel.queue_declare(queue‘order_queue’)处理消息的函数def callback(ch, method, properties, body):print(f收到消息{body.decode()})# 这里写你的业务逻辑比如扣库存print(“库存已扣减”)监听队列channel.basic_consume(queue‘order_queue’,auto_ackTrue,on_message_callbackcallback)print(“等待消息中…”)channel.start_consuming()就是这么简单运行发送端消息就进队列了运行接收端消息就被处理了。四、Kafka 怎么玩Kafka 是个高吞吐量消息队列就像高速公路一样能同时跑很多车。它适合处理海量数据比如日志收集、实时数据流。核心概念跟 RabbitMQ 不太一样●Topic主题消息的分类比如订单主题、日志主题●Partition分区每个主题可以分成多个分区提高并发能力●Producer生产者往 Topic 发消息●Consumer消费者从 Topic 拿消息●Consumer Group消费者组多个消费者组成一个组共同消费一个 Topic怎么安装Kafka 依赖 Zookeeper或者用自带的 KRaft 模式安装稍微麻烦点●去 Kafka 官网下载压缩包●解压后先启动 Zookeeper或者用 KRaft 模式跳过这步●再启动 Kafka懒人方法用 Docker 一键启动docker run -d --name kafka-p 9092:9092apache/kafka:latest怎么用Python 示例先装个库pip install kafka-python发送消息生产者from kafka import KafkaProducer连接 Kafkaproducer KafkaProducer(bootstrap_servers‘localhost:9092’)发送消息到 order_topic 这个主题message “用户下单了订单号12345”producer.send(‘order_topic’, message.encode())print(“消息已发送”)producer.close()接收消息消费者from kafka import KafkaConsumer连接 Kafka订阅 order_topic 主题consumer KafkaConsumer(‘order_topic’,bootstrap_servers‘localhost:9092’,auto_offset_reset‘earliest’)监听消息for message in consumer:print(f收到消息{message.value.decode()})# 这里写你的业务逻辑print(“库存已扣减”)五、RabbitMQ 和 Kafka 怎么选这俩都是消息队列但侧重点不同。我给你个简单的选择标准对比项 RabbitMQ Kafka设计目标 易用、稳定 高吞吐、分布式吞吐量 每秒万级 每秒百万级消息回溯 不支持 支持可以重新消费旧消息适用场景 业务消息、订单、通知 日志收集、实时数据流学习曲线 平缓新手友好 陡峭概念多