- StormMQ是一个支持消息发布-订阅的消息中间件,java语言开发,采用netty网络框架.Kryo序列化框架为网络传输数据序列化,protostruff序列化框架作为数据持久化的序列化
- 消费者A是一个集群,订阅了topicA,broker收到topicA的某条消息后,只投递给消费者A集群中的一台机器.消费者集群的每台机器每秒消费的消息是均衡的.
- broker只能投递符合属性条件的消息给订阅者
- 支持消费者的退订服务.
- broker保证数据同步落盘后才向生产者返回成功Ack.(生产者发布一个消息阻塞等待其Ack,超时时间是10s,避免忙轮询等待,基于netty的事件通知);
- 生产者也支持异步发送消息给broker.(生产者发布一个消息后不阻塞,Ack返回后触发回调函数).
- 消息投递后,如果消费失败、消费超时进行消息重投.
- 消费者订阅主题后同步等待broker发送Ack确认broker收到订阅消息
- 消费者收到消息后,回答broker消费结果,如果消费失败,broker会尽快重投.
- 持久化采用缓存技术,减少磁盘.
- 记录线程的发送速度,控制重发线程的启动.(5秒记录一次)
- 采用netty的主从Reactor线程模型.
- 采用protostruff和Kryo序列化框架.
模型300个生产者,一个消费者
测试结果:
SendTps(个/s) | recvTps(个/s) | Sendrt(ms) | delay(ms) |
---|---|---|---|
6265 | 6269 | 47 | 73 |
- 添加消息配置中心,实现broker集群化对外提供服务.
- 存储备份,防止数据损坏.
- 实现消费者自主消费(拉模式)