RocketMQ五种消息类型
RocketMQ支持五种消息类型
● 普通消息:普通消息也称为并发消息,和传统的队列相比,并发消息没有顺序,但是生产消费都是并行进行的,单机性能可达十万级别的TPS。
● 分区有序消息:与Kafka中的分区类似,把一个Topic消息分为多个分区“保存”和消费,在一个分区内的消息就是传统的队列,遵循FIFO(先进先出)原则。
● 全局有序消息:如果把一个Topic的分区数设置为1,那么该Topic中的消息就是单分区,所有消息都遵循FIFO(先进先出)的原则。
● 延迟消息:消息发送后,消费者要在一定时间后,或者指定某个时间点才可以消费。在没有延迟消息时,基本的做法是基于定时计划任务调度,定时发送消息。在 RocketMQ中只需要在发送消息时设置延迟级别即可实现。
● 事务消息:主要涉及分布式事务,即需要保证在多个操作同时成功或者同时失败时,消费者才能消费消息。RocketMQ通过发送Half消息、处理本地事务、提交(Commit)消息或者回滚(Rollback)消息优雅地实现分布式事务。

Broker、分区、队列的关系

RocketMQ发送之普通消息

● NameServer:192.168.31.103
● Master:192.168.31.105
● Slave:192.168.31.111
执行流程
1. Master与Slave启动向NameServer注册
2. 生产者Producer发送数据前从NameServer获取Master的IP、端口等通信参数
3. 生产者Producer向Master发送消息
4. Master向Slave进行消息同步
代码案例
1 | //普通消息类型 |
运行结果
1 | 23:00:48.741 [main] INFO com.lixiang.rocketmq.mtype.MessageType1 - Broker响应: |
● sendStatus:发送状态,SEND_OK代表成功
● msgId:消息由RocketMQ分配的全局唯一Id,由producer客户端生成,调用方法MessageClientIDSetter.createUniqID()生成全局唯一的Id
● offsetMsgId:Broker服务端将消息追加到内存后会返回其物理偏移量,即在commitlog文件中的偏移量,然后会生成一个Id
● messageQueue:消息队列内容
● topic:主题名称
● brokerName:broker服务器名字,在RocketMQ xxx.propertites配置文件中brokerName项定义
● queueId:queueId队列Id,默认会初始化4个(0-3)
● queueOffset:queueId对应队列逻辑上的位置(偏移量)