前置:学会消费者设计模式
背景
近期集团在做工厂层移动应用,因为是工厂嘛,要对接各种个样的设备(门禁、称重、装车),所以核心应用都放在了各个工厂内。而移动端想统一、统筹管理,想把应用接口提到上层管理配置,而由于项目没有引入mq消息队列框架, 所以创建一个轻量级消息队列来缓存 各个工厂的接口地址与密钥,内存的话肯定选择 redis 啊,废话不多说直接干吧:
我们先来比较一下 redis 消息队列的两种方式RPOP LPUSH vs Pub/Sub
介绍
- Pub/Sub 订阅/发布
这种模式就好比 无线电台,所有订阅队列的使用者豆浆接受发不到该队列的所有消息。
工作流程
消费者 C1、C2、C3 订阅队列 q
生产者 P 将消息m发布到队列 q
队列 q 向所有消费者 C1、C2、C3 发送消息
graph TD A[生产者 P] -->|发布消息 m| B(队列 Q) B --> |发送 m| D[消费者 C1] B --> |发送 m| E[消费者 C2] B --> |发送 m| F[消费者 C3]
优点和问题
由于内存缓冲区的效率,如果消费者失去了与队列的连接,那么消费者很有可能在连接丢失时丢失消息。Redis服务器决定清除消息缓冲区,为下一个传入的消息节省更多的内存。
(start)-><a>[kettle empty]->(Fill Kettle)->|b|
<a>[kettle full]->|b|->(Boil Kettle)->|c|
|b|->(Add Tea Bag)->(Add Milk)->|c|->(Pour Water)
(Pour Water)->(end)
分享程序员的理财、生活!我是乐子,多多指教!
- EOF -