基础能力
不同的消息队列有着不同的特点,但是以下几点,是无论哪种消息队列,都需要进行考虑的。首先是可靠性,也就是我们常说的不丢消息,如果一个消息队列无法保证消息可靠,那么就会遇到大麻烦,查问题,修数据便是家常便饭。其次是分布式,一个好的消息队列,必须是支持集群的,而非单机模式。假如消息队列无法分布式部署,网络的波动,硬件的故障,就有你好受。第三是性能,如果一个消息队列的性能太差,就意味着消息的消费可能延迟,就可能影响到很多业务,造成业务不可用,得不偿失。
开源
对于大部分的公司来说,自己去重复造轮子的意义并不是很大,我们拿来开源的项目来使用的效果更好。为什么是开源而不是一些厂商提供的二进制呢?是代码就有bug,无论是多么成熟的项目,如果你在使用这个消息队列的时候遇到问题了,开源项目,你至少还有阅读源码,改一改搏一搏的可能,无需等待厂商进行发版修复。
流行
除非某个冷门的MQ正好有你需要的某种特性,否则建议大家尽量使用流行的方案。就跟买车一样,尽量不要买小众的汽车,平时开起来是没有什么问题,但是一旦坏了,需要修的时候,小众的汽车就麻烦多了。软件也是如此,如果你使用的是RMQ,kafka这类中间件,你遇到的问题,可能很多人也遇到过,这个时候就可以站在巨人的肩膀上,快速解决问题。
生态
一个好的生态,对中间件的发展是非常重要的。就好比SpringCloud等,拥有丰富的生态,在SpringCloud这个巨人身上,你介入一个新的组建都是非常的方便。消息队列也是如此,举个例子,Kafka与Flink,Flink内置了Kafka的DataSource,开发流式应用非常的方便,无需其他开发。