1. Rocketmq是什么?
Rocketmq是阿里(现已捐赠给Apache)开源的一款消息中间件,具有效率高、低延时、高可靠等特性。对比流行的消息中间件,它比Activemq效率高,比Kafka可靠性高。
2. 术语
2.1 Producer
消息生产者,产生消息,发送至rocketmq服务端。
2.2 Producer Group
生产者组,在消息回查时,会随机挑选同一个生产组的成员进行回查。消息回查涉及到rocketmq的事务及二阶段提交问题,请参考其他文档。
2.3 Consumer
消息消费者,接收消息,进行消费。
2.4 Consumer Group
消费者组,在发送非广播消息时,同一个组内的消费者,不会消费到相同的消息。
2.5 Topic
主题,消息的逻辑分类。在rocketmq服务端,发送消息之前需要保证Topic存在。在生产者生产消息时,需要为每一个消息指定Topic。消费者消费消息时,也需要指定消费哪一个Topic的消息。
2.6 Queue
队列。每一个Topic下会创建若干个队列,用于实际存储消息。
2.7 Message
消息,承载消息的结构。Message中有Topic,Tag,消息内容等。
2.8 Tag
标签,Topic下一级的分类。同一个Topic的消息,可以指定不同的Tag。在消费者进行消费时,可以通过Tag进行过滤。
2.9 Broker
Broker即为rocketmq的服务端,每个服务端会启动一个broker进程。
2.10 Name Server
名字发现服务,在rocketmq集群中,通过name server进行broker发现及注册。使用客户端时,只需要配置name server的集群地址,不需要配置具体的broker的地址。Broker的使用是封装在api中的,开发者不需要关心。
3. 功能特性
3.1 事物消息
rocketmq支持将某次操作和消息发送绑定到一起,如果操作成功,则消息提交,消费端会消费到消息;如果操作失败,则消息回滚,服务端消费不到消息。比如,数据库操作。
3.2 广播消息
在普通的消费模式中中,同一个消息,只能被一个Consumer Group的某一个Consumer消费到。在广播消息中,一个Consumer Group中的每一个Consumer都会消费到相同消息。
3.3 负载均衡
Producer发送消息时,可以平均的将消息发送至所有Broker ,完成负载均衡。
3.4 顺序消息
rocketmq支持发送顺序消息,保证consumer可以按顺序接收。
3.5 消息过滤
rocketmq支持两种消息过滤方式。
第一种,上文中提到的Tag过滤。在接收消息时,指定需要过滤的Tag。例如:TagA || TagB || TagC。
第二种,最新版的rocketmq支持SQL特性的过滤方式。在生产消息时,通过用户属性字段添加自定义属性。接收消息时,通过过滤条件进行过滤。详情请参考其他文档。
3.5.1 计划消息(延迟投递消息)
计划消息发送成功后,消费端不能立即获取到。需要等到预先设置好的延迟时间过后,才能被消费到。
3.5.2 批量消息
发送消息时可以将多个Message放入一个List结构中进行统一发送。但是这些消息需要有相同的Topic而且是非计划消息。