参考文章:https://mp.weixin.qq.com/s/tiN6Z_VjTKZ5voFu4TFElg
1、ActiveMQ
ActiveMQ是老牌的消息中间件,国内很多公司过去运用的还是非常广泛的,功能很强大。但是问题在于没法确认ActiveMQ可以支撑互联网公司的高并发、高负载以及高吞吐的复杂场景,在国内互联网公司落地较少。而且使用较多的是一些传统企业,用ActiveMQ做异步调用和系统解耦。
不会像构造方法一样,每次执行都创建一个新对象
静态工厂方法的第三个优点是,与构造函数不同,它们可以返回其返回类型的任何子类型的对象
- 类的返回对象可以根据调用函数的输入参数而不同
- 例如enumSet,当参数为64个或者更少的时候,调用静态方法返回RegularEnumSet实例,当参数为65或者更多的时候,调用静态方法返回JumboEnumSet 实例
- 类的返回对象可以不存在当类的方法被重写。
2、RabbitMQ
- RabbitMQ,他的好处在于可以支撑高并发、高吞吐、性能很高,同时有非常完善便捷的后台管理界面可以使用。
- 另外,他还支持集群化、高可用部署架构、消息高可靠支持,功能较为完善。 而且经过调研,国内各大互联网公司落地大规模RabbitMQ集群支撑自身业务的case较多,国内各种中小型互联网公司使用RabbitMQ的实践也比较多。
- 除此之外,RabbitMQ的开源社区很活跃,较高频率的迭代版本,来修复发现的bug以及进行各种优化,因此综合考虑过后,公司采取了RabbitMQ。
- 但是RabbitMQ也有一点缺陷,就是他自身是基于erlang语言开发的,所以导致较为难以分析里面的源码,也较难进行深层次的源码定制和改造,毕竟需要较为扎实的erlang语言功底才可以。
3、RocketMQ
- RocketMQ,是阿里开源的,经过阿里的生产环境的超高并发、高吞吐的考验,性能卓越,同时还支持分布式事务等特殊场景。
- 而且RocketMQ是基于Java语言开发的,适合深入阅读源码,有需要可以站在源码层面解决线上生产问题,包括源码的二次开发和改造
4、Kafka
Kafka提供的消息中间件的功能明显较少一些,相对上述几款MQ中间件要少很多。
但是Kafka的优势在于专为超高吞吐量的实时日志采集、实时数据同步、实时数据计算等场景来设计。
因此Kafka在大数据领域中配合实时计算技术(比如Spark Streaming、Storm、Flink)使用的较多。但是在传统的MQ中间件使用场景中较少采用。
5、mq优点
- 系统解耦
- 异步调用
- 流量削峰
6、mq缺点
- 系统可用性降低 ,一旦你的MQ挂了,就导致你的系统的核心业务流程中断了。本来你要是不引入MQ中间件,那其实就是一些系统之间的调用,但是现在你引入了MQ,就导致你多了一个依赖。一旦多了一个依赖,就会导致你的可用性降低。
系统稳定性降低
分布式一致性问题