其实最初接触到消息的机制是在项目中,是个消息队列的概念,比如我给用户发券的时候也要给用户发送短信给手机推送消息,同步发送的话量大,耗时,不现实,而且我半夜发券,也不能半夜给用户发消息,所以我把信息先推到消息队列中(当时用的阿里云的),合适的时间再开始做这件事情。
所以消息队列给我的印象是存储,异步,通信。
下面我们来正式说。
一:什么是消息队列?消息中间件?
消息队列:用于两边传送信息的队列。消息中间件是采用消息传送机制/消息队列的中间件技术,进行数据交流,用在分布式系统的集成。
1.异步处理,如文章开始。
2.应用解偶,比如用户下个订单要减库存,可以采用消息队列来接偶,
3.流量的削锋,这个我面试的时候被问到秒杀场景,其实秒杀可以用消息中间件,还可以解决库存减值问题
4.日志处理,可以将错误日志和用户行为日志通过消息队列做存储,这个主要是Kafka实现。
三:有哪几种消息队列?消息队列有什么特点?
1:比如,activeMQ,RabbitMQ,Kafka。
kafka和RabbitMQ的比较
1、 RabbitMq比kafka成熟,在可用性上,稳定性上,可靠性上,RabbitMq超过kafka
2、 Kafka设计的初衷就是处理日志的,可以看做是一个日志系统,针对性很强,所以它并没有具备一个成熟MQ应该具备的特性
3、 Kafka的性能(吞吐量、tps)比RabbitMq要强
特点:
消息模式:生产者,消费者
主题订阅
请求响应
多语言:不一定是java实现,也会支持多语言。
会有吞吐量限制,消息会丢失,会重复,支持持久化,事务,负载均衡
四:JMS,activeMQ?Spring?
JMS我理解为Java提供的实现应用程序间消息传递交换的一套标准规范接口(注意,只是接口),activeMQ是基于JMS的一个实现,Spring中有提供对activeMQ的整合。
JMS:
1)连接工厂:创建一个JMs连接
2)JMS连接:客户端和服务器之间的一个连接。由工厂产生。
3)JMS会话:客户和服务器会话的状态,建立在连接之上的,由连接产生。
4)JMS目的:消息队列,由会话产生。
5)JMS生产者:消息的生成,由会话产生。
6)JMS消费者:接收消息,由会话产生。
7)Broker:消息中间件的实例(ActiveMq),消息队列核心,相当于一个控制中心,负责路由消息、保存订阅和连接、消息确认和控制事务.
后续