消息队列在生产者与消费者之间保存、转交消息,用于异步处理、削峰或降低直接调用耦合。
引入后的变化
请求可以先登记任务再由消费者处理,但发送成功、代理接收、消费者收到和业务完成是不同状态。队列长度增加通常意味着生产和消费速率失衡,并不代表系统已经可靠完成了工作。
设计问题
应明确消息保留、确认、重投、并发、顺序和失败处理。队列会增加延迟、重复及运维复杂度,不能为了“解耦”省略任务结果查询或补偿。
具体保证取决于产品、队列类型和配置。以 RabbitMQ 为例,持久性、生产确认和消费确认共同影响故障后的行为,单独声明 durable 并不包含所有可靠性条件。