什么是信息队列?
信息队列是存储生产者和消费者之间信息的缓冲.
制作人将数据发送给队列,消费者从中读取.
队列使双方脱钩,从而不需要互相了解.
这是分布式系统中的核心模式.
把它当成餐厅订购系统 你(制片人)在一张票上写下你的订单,然后放入一盘旋盘.
厨房(消费者)在准备就绪后从自旋盘上取出门票.
你对厨师不大叫,厨师也不等你.
摇篮就是排队 为什么使用信件队列 ?
三大原因: 脱钩:生产者和消费者独立地发展.
你可以改变一个而不碰另一个。
缓冲:出厂商可以跑快于消费者.
队列吸收了突起并可以防止超载.
缩放:你可以增加更多的消费者来处理更多的负载,或者更多的生产者来产生更多的工作.
核心概念制作人:发送消息.
消费者:接收消息.
队列: 存储信件直到消耗.
经纪:主机队列的服务器(例如:RabbitMQ,Kafka,Redis).
承认:当消费者告诉经纪人,它成功地处理了一条消息。
死信队列:如果在重试后无法处理,则信件会去的地方.
使用和.
Redis Redis 的简单示例有一个基于列表的简单队列.
这里有一个小的 Python 例子使用 。
这是一个简单的FIFO队列.
它处理基本案件,但缺乏承认、复审和路线等特征。
Real-World Electric with RabbitMQ RabbitMQ是一个全能的经纪人.
以下是Python的生产者和消费者使用.
Production (: Consumers (: Note the.).
如果消费者在敲门前撞倒,RabbitMQ将消息重写给另一个消费者.
这是可靠性的关键特征.
图案:工作队列对 Pub/Sub 两种常见模式: 工作队列:每条消息都给一个完全的消费者.
适合分配任务 。
出版/订阅:每条信息都发给所有消费者。
善于广播事件.
在RabbitMQ中,工作队列使用单队.
Pub/Sub使用交换和多条队列捆绑在它们上.
当不使用信件队列时会添加复杂性 。
如果: 您的系统是一个小的单层, 没有缩放需要, 请不要使用 。
您需要立即同步响应( 使用 HTTP 或 gRPC) 。
您的数据高度交易性 需要严格命令所有操作。
常见的陷阱 忘却了: 消息被无穷无尽地重寄.
毒信息:总是失败的信息.
使用死信队列 。
订单问题:大多数队列并不能保证跨越多个消费者的全球秩序.
需要严格订购的,使用单个消费者或分区键.
监控:没有度量衡,你对排队深度和消费滞后视而不见.
通訊排行是构建有弹性,可扩展系统的强大工具.
为基本需要从Redis开始简单化,移动到RabbitMQ或Kafka进行生产级特性.
记得从第一天起就负责确认、重复和监测 密钥取出: 解开您的组件, 让队列处理交接 。
交通拥堵不会毁了你的服务 你的未来会感谢你的.