消息队列MQ
什么是消息:A要通知B,发送的东西叫做消息。什么是队列:先进先出,顺序。只要是涉及到消息队列,肯定要处理事务问题。事务:原子性。我所有的动作,要么都不执行,要不全部执行成功。比如说:张三给我转账100元。可以拆分为两个动作:张三账户减100,我的账户加100.传统串行化服务。缺点:耦合性强(系统各个模块之间耦合性太强),只有全部成功才算成功系统吞吐量不大,耗时多优点:系统架构简单,排查错误方便。事
什么是消息:A要通知B,发送的东西叫做消息。
什么是队列:先进先出,顺序。
只要是涉及到消息队列,肯定要处理事务问题。
事务:原子性。我所有的动作,要么都不执行,要不全部执行成功。
比如说:张三给我转账100元。可以拆分为两个动作:张三账户减100,我的账户加100.
传统串行化服务。
缺点:
- 耦合性强(系统各个模块之间耦合性太强),只有全部成功才算成功
- 系统吞吐量不大,耗时多
优点:系统架构简单,排查错误方便。
事务:原子性。所有动作,要么都不执行要么全执行成功。
并联型:
优点:解耦性强,提升性能
缺点:只要涉及到消息队列,肯定要处理事务问题。
mq:无视底层通讯会议。
为了解决重复通知的问题:可以使用分布式锁。
什么是MQ
Message Query(MQ),消息队列中间件,很多初学者认为,MQ通过消息的发送和接受来实现程序的异步和解耦,mq主要用于异步操作,这个不是mq的真正目的,只不过是mq的应用,mq真正的目的是为了通讯。他屏蔽了复杂的通讯协议,像常用的dubbo,http协议都是同步的。
这两种协议很难实现双端通讯,A调用B,B也可以主动调用A,而且不支持长连接。mq做的就是在这些协议上构建一个简单协议——生产者、消费者模型,mq带给我们的不是底层的通讯协议,而是更高层次的通讯模型。他定义了两个对象:发送数据的叫做生产者,接受消息的叫做消费者,我们可以无视底层的通讯协议,我们可以自己定义生产者消费者。
MQ的两种流派
1,有broker的
broker是什么,可以理解为是一个中转站。生产者将消息发送给他就结束自己的任务了,broker将消息主动推送给消费者(具体的将消息推送到哪个队列,或者说消费者主动请求)
重topic
必须要有topic
kafka:全球消息处理性能最快的一款mq
rocket:阿里内部的一个大神根据kafka的执行原理手写的,性能与kafka差不多,但是功能上比kafka要多,比如说顺序消费。
轻topic
可以没有topic,topic只是一种中转模式
rabbitmq
2,无broker的
zeromq:没有使用broker,是直接使用socket进行通信。
穿插知识点
并行和并发的区别
事务简单介绍
消息队列和普通串行程序相比有哪些优缺点
更多推荐
所有评论(0)