不区分不同种类的MQ,MQ就是一台服务器。会将生产者Server产生的消息,用一种数据结构,例如树、哈希表。消息队列来进行存储消息。然后消费者Server从消息队列中获取消息。
这里以RocketMQ为例,毕竟是阿里双十一在用的MQ
1.如何连接MQ Server?
既然MQ是一台服务器,那想要获取到这台Server中消息,肯定要进行通信,这里说一下个人理解。通过ip+tcp协议进行连接,使用RemotingCommand(相当于http一种应用层的协议规则)进行网络通信
2.如果存储不同的消息,例如:支付状态消息、用户修改信息是否成功消息。如何区分呢?
在每次生成一个消息时,都会有一个唯一对应的topic来标识。消费者会根据需要,获取适合自己的topic来消费。
3.不同MQ存在什么区别?
1.持久化地方不同:mq会有消息丢失的问题,所有会有不同的存储方式。
当前业界几款主流的MQ消息队列采用的存储方式主要有以下三种方式:
1)分布式KV存储:比如redis
2)文件系统:比如RocketMQ、Kafka、RabbitMQ
3)关系型数据库DB:比如ActiveMQ、mysql
从存储效率来说, 文件系统 > 分布式KV存储 > 关系型数据库DB
2.功能不同:例如:kafka不支持事务消息,支持消息顺序,不支持定时消息。这些可自行查询相关资料。
4.RockerMQ的好处
1. 解耦、异步、削峰。就不说了。这些是所有mq最重要,也都存在的功能
2. 事务消息
例如:订单系统 订单创建成功后 发送消息–>购物车系统 收到订单创建成功的消息–>操作删除支付过的商品项。
如果这个消息如果是事物消息。mq中的消息会回调,只有获取到了订单操作成功的标识,购物车系统才会获取到消息。成功之前会不断进行消息补偿操作。之前购物车系统是获取不到消息的。
3. 消息顺序
例如:一些游戏平台需要保证优先注册的五百名可以收到5000元奖励,那么要保证消息处理时的五百名一定是实际的顺序.才能做到公平公正.
总结:
1.mq解决数据了过多的相关业务。
2.mq解决实时监控数据的相关业务。
3.mq也是服务调用的一种方式(事件驱动