MQ与dubbo的区别
- dubbo是rpc的集成,同步,注重服务暴露
- MQ是异步消息,注重可靠性传输
为何使用MQ
假设一个场景,一个互联网商城中,后台管理系统要添加一个商品,如何同步到搜索系统的索引库中呢?
方案一:后台管理系统在添加商品的业务逻辑中添加一个同步索引库的业务逻辑。缺点:业务逻辑耦合度高,业务拆分不明确。
方案二:业务逻辑在搜索系统中实现,调用服务在后台管理系统中实现,业务逻辑分开。缺点:服务之间的耦合度变高,服务的启动有先后顺序。
方案三:使用消息队列MQ,就是消息中间件。
如何使用ActiveMQ
下载安装,整合Spring,使用JMSTemplate对象发送消息。(JMS即Java消息服务 Java Message Service 应用程序接口)
ActiveMQ,RabbitMQ,Kafka 对比
- ActiveMQ:历史悠久的开源项目,已经在很多产品中得到应用,实现了JMS1.1规范,可以和spring-jms轻松融合,实现了多种协议,不够轻巧(源代码比RocketMQ多),支持持久化到数据库,对队列数较多的情况支持不好。
- RabbitMq:它比kafka成熟,支持AMQP事务处理,在可靠性上,RabbitMq超过kafka,在性能方面超过ActiveMQ。
- Kafka:
- 吞吐量方面:kafka具有高的吞吐量,内部采用消息的批量处理,zero-copy机制,数据的存储和获取是本地磁盘顺序批量操作,具有O(1)的复杂度,消息处理的效率很高。
- 负载均衡方面:kafka采用zookeeper对集群中的broker、consumer进行管理,可以注册topic到zookeeper上;通过zookeeper的协调机制,producer保存对应topic的broker信息,可以随机或者轮询发送到broker上;并且producer可以基于语义指定分片,消息发送到broker的某分片上。
- 容错方面:kafka批量形式下,可能会丢数据,非批量形式下, 1. 使用同步模式,可能会有重复数据。 2. 异步模式,则可能会丢数据。