RockerMQ
RocketMQ 是阿里巴巴于 2012 年开源的分布式消息中间件
特点
- 具有灵活的可扩展性。RocketMQ 天然支持集群,其核心四大组件(NameServer、Broker、 Producer、 Consumer)的每一个都可以在没有单点故障的情况下进行水平扩展。
- 具有海量消息堆积能力。 RocketMQ 采用零拷贝原理实现了超大量消息的堆积能力, 据说单机己经可以支持亿级消息堆积,而且在堆积了这么多消息后依然保持写入低延 迟。
- 支持顺序消息。 RocketMQ 可以保证消息消费者按照消息发送的顺序对消息进行消费。 顺序消息分为全局有序消息和局部有序消息, 一般推荐使用局部有序消息,即生产者 通过将某一类消息按顺序发送至同一个队列中来实现。
- 支持多种消息过滤方式。消息过滤分为在服务器端过滤和在消费端过滤。在服务器端 过滤时可以按照消息消费者的要求进行过滤,优点是减少了不必要的消息传输,缺点 是增加了消息服务器的负担,实现相对复杂。 消费端过滤则完全由具体应用自定义实 现,这种方式更加灵活,缺点是很多无用的消息会被传输给消息消费者。
- 支持事务消息。 RocketMQ 除支持普通消息、顺序消息之外,还支持事务消息, 这个 特性对于分布式事务来说提供了另一种解决思路。
- 支持回溯消费。回溯消费是指对于消费者已经消费成功的消息,由于业务需求需要重 新消费。 RocketMQ 支持按照时间回溯消费,时间维度精确到毫秒,可以向前回溯, 也可以向后回溯。
基本概念
生产者:
生产者(Producer)负责生产消息,生产者向消息服务器发送由业务应用程序系统生成的消 息。 RocketMQ 提供了三种方式发送消息:同步、异步和单向 。
- 同步发送指消息发送方发出数据后, 会在收到接收方发回的响应之后才发送下一个数据包。 一般适用于重要通知消息场景,例如重要通知邮件、 营销短信等。
- 异步发送指发送方发出数据后, 不等接收方发回响应,就接着发送下一个数据包。一般适用于可能链路耗时较长而对响应时间敏感的业务场景,例如用户视频上传后通知启动转码服务 等。
- 单向发送指只负责发送消息而不等待服务器回应且没有回调函数触发。 一般适用于某些耗 时非常短但对可靠性要求并不高的场景,例如日志收集等。
生产者组:
生产者组(Producer Group)是一类生产者的集合,这类生产者通常发送一类消息并且发送 逻辑一致,所以将这些生产者分组在一起。 从部署结构上看,生产者通过生产者组的名字来标 识自己是一个集群。