消息队列
使用消息队列的场景
1. 异步处理
将串行的处理过程变成可以异步处理。比如用户注册完信息后,可以将注册完的消息写入消息队列中,向邮箱发送邮件和相手机发短信两个操作可以异步执行,这样比串行执行快。
2. 应用解耦
将每个独立的过程分开,比如下单和检查库存系统两个过程分开,用户下单成功,但是订单是否完成还要看库存系统。
3. 流量削峰
突然大量流量涌入,但是系统处理能力有限,又不能抛弃用户请求,可以将用户请求放进消息队列,慢慢处理。
4. 日志处理
和流量削峰差不多,一个时间段用户产生大量的用户日志,将处理日志的请求放进消息队列中,慢慢处理。
5. 消息通讯
消息队列最基本的功能就是消息通信
Java 消息传递服务(JMS)
消息模型
p2p 模型
端到端的形式
发布订阅(pub/sub)
消息消费
- 同步接收消息
- 异步接收消息
编程模型
- 连接工厂 connectionFactory
- 连接 connection
- 会话 session
- 消息生产者的消息发送目标或者说消息消费者的消息来源 destination
- 消费者
- 生产者
- 消息监听器,观察者模式
常用的消息队列
- ActiveMQ
- RabbitMQ
- ZeroMQ
- Kafka
实践
ActivieMQ Demo
- 启动 ActiveMQ 的服务,在 bin/win64 中
- 打开监控网页
- 编写生产者和消费者,分别启动
抢购系统
流量削峰 RabbitMQ+Redis集群+Quartz实现简单高并发秒杀