大致跑了一些rocketmq例子了,也做了hello world,今天对rocketmq的功能,做一些梳理
1.发布订阅
简单的消息系统,通过topic 订阅发布
2.消息优先级
定义不同的topic 或者tag,客户端来控制各个topic的抓取优先级
3消息顺序
一个queue中的消息是严格有序的
4.消息存储
消息持久化,各种牛逼的技术后面细分
5.消息过滤
客户端上传filter java类文件,有filterServer来执行,用cpu来换取io,不用传到客户端来校验
6.分布式事务
目前开源没有完全实现,之前的一个分支有简单的实现,喜欢的朋友可以参考 @李战辉大神的分支
7.定时(延时)消息
private String messageDelayLevel = "1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h";
topic = ScheduleMessageService.SCHEDULE_TOPIC;
queueId = ScheduleMessageService.delayLevel2QueueId(msg.getDelayTimeLevel());
8.消息轨迹
目前阿里云上ONS支持,开源里面没有实现,我们可以基于rocketmq的消息协议,来进行扩展
extFields加入我们自定义的字段(全局消息id)
private int code;
private LanguageCode language = LanguageCode.JAVA;
private int version = 0;
private int opaque = requestId.getAndIncrement();
private int flag = 0;
private String remark;
private HashMap<String, String> extFields;
private transient CommandCustomHeader customHeader;
9.消息查询
支持messageId和message Key , rocketmq-tools提供了一些命令api
10.消息回溯
是指rocketmq支持按照时间进行消息回溯,重新消费,也就是rocketmq支持按照时间查询
public class QueryMessageRequestHeader implements CommandCustomHeader {
@CFNotNull
private String topic;
@CFNotNull
private String key;
@CFNotNull
private Integer maxNum;
@CFNotNull
private Long beginTimestamp;
@CFNotNull
private Long endTimestamp;
@Override
public void checkFields() throws RemotingCommandException {
}