一、消息模型
-
点对点模型:消息生产者向队列中发送一个消息后,只能被一个消费者消费
-
发布/订阅:生产者发送一个消息,多个消费者从该频道订阅并消费
发布订阅模式使用异步,生产者发送完消息后不等待返回,继续工作。
- 与观察者模式的区别:观察者模式使用同步工作,生产者和消费者不透明,也就是生产者直到自己产生的消息被哪个消费者消费了。而发布订阅异步工作,生产者只管生产消息,往频道里一扔就不管了,不关心被消费者消费掉了。
二、应用场景
1、异步处理:比如用户注册时发送激活邮件,把发送邮件和验证的工作给另一个程序处理,主程序发一个消息给邮件程序,立即返回继续处理后序逻辑。当然,这种应用需要系统允许异步处理。
2、流量削峰:高并发情况下,将请求放到消息队列里,由服务器根据负载适时提取消息处理。
3、应用解耦:各模块间不直接调用,通过消息队列选择性订阅消息,完成调用。
三、可靠性
- 发送端一定能将消息放进队列
实现方法:在本地建表,存储信息与业务数据,业务端的事务提交之后将消息发送到队列,如果成功则删除表中的数据,否则重传 - 接收端一定能从队列中收到消息
实现方法:保证消息具有唯一编号,并用日志表记录已经消费的消息编号。