作者:一个怪瓜的自白 | 来源:互联网 | 2023-08-20 18:39
一、消息队列概述
消息队列中间件是分布式系统的重要组建,主要解决:应用耦合,异步消息,流量削峰、消息通讯等问题。
目前在生产环境,使用较多的消息队列有:ActiveMQ、RabbitMQ、ZeroMQ、kafka、MetaMQ、RocketMQ
二、消息队列应用场景
1.异步处理
如,用户注册后,串行发送注册邮件和短信,会浪费时间。但是使用消息队列,注册信息写入数据库——写入消息队列——异步读取——发送注册邮件(注册短信),可提高系统吞吐量。
2.应用解耦
场景:用户下单后,订单系统需要通知库存系统,传统方法是调用库存系统的接口,但假如库存系统无法访问,则订单失败,订单系统与库存系统耦合。
解决方案:
3.流量削峰
应用场景:秒杀活动,一般会因为流量过大而导致应用挂掉。应用消息队列,可控制活动人数,缓解短时间内高流量
解决方案:服务器接受用户请求后,首先写入消息队列,如果消息队列长度超过最大数量,则直接抛弃用户请求或跳转到错误页面。
4.日志处理
如kafka的应用,解决大量日志传输的问题。
日志采集客户端:负责日志数据采集,定时写入kafka队列。
kafka队列:负责日志数据的接受、存储和转发
注:Elasticsearch:实时日志分析服务的核心技术,一个schemaless,实时数据存储服务,通过Index组织数据,兼具强大的搜索和统计功能。kibana是基于Elasticsearch的数据可视化组件。
三、JMS消息服务
有两种消息模型,P2P和 publish/subscribe
1.点对点
每个消息 只有一个消费者,发送者发送消息后,不会管是否接收成功
2.发布/订阅模式
三个角色:主题、发布者、订阅者。多个发布者发送消息到多个订阅者。
3.消息消费:
同步:订阅者通过receive方法接收消息,接收到消息前将一直阻塞
异步:可注册一个消息监听器,小气到达之后,自动调用监听器的onMessage方法