消息队列相关概念
1. 消息队列(解耦,削峰-减轻服务器压力,异步)
1.1 传统消息队列的应用场景
无消息队列(同步处理)
有消息队列(异步处理)
信息产生放入消息队列(注册用户注册信息写入数据库),页面响应注册成功,发送短信的请求写入消息队列
1.2消息队列的两种模式(kafka发布订阅,消费者主动拉取)
模式 | 特点 |
---|---|
点对点模式 | 消息生产者生产消息发送到Queue,然后消费者从队列取出并且消费消息.消息被消费以后,queue不再存储,所以消费者不能再消费已被消费的消息.queue支持存在多个消费者,但是对于一个消息而言,只会有一个消费者可以消费 |
发布/订阅模式 | 消息生产者发布消息到topic,同时有多个消费者订阅消费该消息,和点对点方式不同,发布到topic的消息会被所有订阅者消费 |
1.3 使用消息队列的好处
1) 解耦
允许独立的扩展或修改两边(生成,消费)的处理过程,只要确保它们遵守同样的接口约束
2) 可恢复性
即使系统的一部分组件失效,不会影响到整个系统.消息队列降低了进程间的耦合度,即使一个处理消息的进程挂掉,加入队列中的消息仍然可以在系统恢复后被处理
3) 缓冲(生产>消费能力)
有助于控制和优化数据流经系统的速度,解决生产消息和消费消息的处理速度不一致的问题
4)灵活性&峰值处理能力
在访问量剧增的时候,应用仍然需要有效,但是这样的突发流量并不常见.如果以能处理这类峰值访问为标准拉投入资源随时待命无疑是巨大的浪费.使用消息队列能使关键组件顶住突发的访问压力,不会因为突发的超负荷的请求而完全崩溃
5)异步通信
很多时候,用户不想也不需要立即处理消息,消息队列提供了异步处理机器,运行将消息放入队列,并不立即处理它,需要时候再去处理