事务性邮件与短信
注册、收据和重置消息由 Web 应用放入队列,再由一组 worker 发送。
即使 worker 崩溃也不会丢失任务的 FIFO 队列,生产者和消费者并行运行。
任何服务都可以添加工作,无需等待消费者。
使用真实 HotKV 命令和示例回复的动画演示。点击任意步骤即可跳转。 命令和回复保持英文,与您在 HotKV 中输入和看到的完全一致。
发送邮件、调整图片尺寸和 webhook 等后台工作,需要在产生工作的代码和执行工作的代码之间放一个队列。如果 worker 在任务中途崩溃时队列会丢失任务,那还不如没有队列,因为没人会发现任务不见了。
list 提供了简单的 FIFO 队列。BLMOVE 在把每个任务交给 worker 的同时将其移到处理列表中,因此即使该 worker 消失,进行中的任务也始终存放在某处。生产者和消费者由并行的 worker 线程提供服务。
任何服务都可以添加工作,无需等待消费者。
LPUSH queue:emails "{\"to\":\"ada@example.com\",\"tpl\":\"welcome\"}"BLMOVE 阻塞直到有任务可用,然后一步将其移到处理列表。
BLMOVE queue:emails queue:emails:processing RIGHT LEFT 0邮件已发出。任务从处理列表中移除。
LREM queue:emails:processing 1 "{\"to\":\"ada@example.com\",\"tpl\":\"welcome\"}"Worker 2 在任务中途宕机。它的任务仍在处理列表中,没有丢失。
LRANGE queue:emails:processing 0 -1监控程序把被遗弃的任务移回队列,由另一个 worker 接手。
LMOVE queue:emails:processing queue:emails LEFT RIGHT注册、收据和重置消息由 Web 应用放入队列,再由一组 worker 发送。
上传的文件排队等待生成缩略图和转码,转码程序崩溃也绝不会丢掉文件。
外发的 webhook 被放入队列并重试,不会阻塞触发它们的请求。
LPUSH 配合 BRPOP,worker 在工作到来之前一直休眠。
LPUSHBRPOPBLMOVE 以原子方式把每个任务交给处理列表。
BLMOVELREM生产者和消费者由并行的 worker 线程提供服务。
如需确认机制、消费者组和重放,请使用流。
XADDXREADGROUP如果您用 BLMOVE 认领任务,任务会留在处理列表中。监控程序可以把停留过久的任务移回队列。
不需要。BRPOP 和 BLMOVE 会阻塞直到任务到来,可选设置超时。
list 是最简单的队列。流增加了消费者组、逐条消息确认和历史记录。请参阅事件流用例。