互联网产品往往要面对突如其来的巨大请求量,而后端业务能够支持的并发请求数量是有限的。常用的架构是首先让请求进入消息队列,例如 Kafka,RabbitMQ,GooglePubSub 等等。同时后端服务最为消费者分批地从消息队列中获取自己能够处理的消息。
这里就涉及到一些复杂问题,例如:
- 消息处理的原子性,或者叫事务性。即一个消息处理到一半出错了,那么这个消息不应该被从消息队列中删除。
- 消息的批处理,尤其是网络延迟较高的情况下,批量消费消息可以减少很多等待时间。
- 避免消息丢失,在出错的时候消息不应该丢失。
- “软着陆”,或者说正确处理关机,在关机前应该做好准备工作。
以上这些功能 Broadway 都提供了,并且还有更多。
而要用好 Broadway,首先需要熟悉 GenStage。GenStage 是一个更加基础的库,使用它可以定义出消息的消费者和生产者。
使用 GenStage 定义出的生产者和消费者本质上是一个个进程,包含了特定的预设的行为模式。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。