也许在大家公司从没有使用过MQ,也不知道这东西是用来干什么的,可是一旦你进入大公司你就会发现,这东西到处可见。今天就来讲说MQ方面的东西,我公众号有
activemq
的 demo,你们能够本身去看看。
MQ
Message Queue
简称MQ
,中文消息队列。前端
你能够把它理解为一个中间件,帮你完成多个系统或应用间的消息传递。java
MQ
首先它有3个核心,解耦
,异步
,削峰
,所以咱们能够想到如下使用场景:git
如今想一想你为何没有使用到mq吧?或是考略使用mqgithub
任何事物都有它的两面性,既然有优势那也有缺点:数据库
万一mq挂了,队列里面的数据没有了,其它系统数据还没处理完,这可咋整?浏览器
你用个mq是爽了,其它系统也要对应的修改本身的系统,来消费队列中的消息。硬生生加个 MQ 进来,你怎么保证消息没有重复消费?怎么处理消息丢失的状况?怎么保证消息传递的顺序性?头大头大,问题一大堆,痛苦不已。架构
你订单系统操做成功了,可是库存系统却失败了,这样致使了数据的不一致。并发
因此消息队列实际是一种很是复杂的架构,你引入它有不少好处,可是也得针对它带来的坏处作各类额外的技术方案和架构来规避掉,作好以后,你会发现,妈呀,系统复杂度提高了一个数量级,也许是复杂了 10 倍。可是关键时刻,用,仍是得用的。异步
特性 | ActiveMQ | RabbitMQ | RocketMQ | Kafka |
---|---|---|---|---|
单机吞吐量 | 万级,比 RocketMQ、Kafka 低一个数量级 | 同 ActiveMQ | 10 万级,支撑高吞吐 | 10 万级,高吞吐,通常配合大数据类的系统来进行实时数据计算、日志采集等场景 |
topic 数量对吞吐量的影响 | topic 能够达到几百/几千的级别,吞吐量会有较小幅度的降低,这是 RocketMQ 的一大优点,在同等机器下,能够支撑大量的 topic | topic 从几十到几百个时候,吞吐量会大幅度降低,在同等机器下,Kafka 尽可能保证 topic 数量不要过多,若是要支撑大规模的 topic,须要增长更多的机器资源 | ||
时效性 | ms 级 | 微秒级,这是 RabbitMQ 的一大特色,延迟最低 | ms 级 | 延迟在 ms 级之内 |
可用性 | 高,基于主从架构实现高可用 | 同 ActiveMQ | 很是高,分布式架构 | 很是高,分布式,一个数据多个副本,少数机器宕机,不会丢失数据,不会致使不可用 |
消息可靠性 | 有较低的几率丢失数据 | 基本不丢 | 通过参数优化配置,能够作到 0 丢失 | 同 RocketMQ |
功能支持 | MQ 领域的功能极其完备 | 基于 erlang 开发,并发能力很强,性能极好,延时很低 | MQ 功能较为完善,仍是分布式的,扩展性好 | 功能较为简单,主要支持简单的 MQ 功能,在大数据领域的实时计算以及日志采集被大规模使用 |
上面表格来自:https://github.com/doocs/adva...分布式