题目
题目内容
实现一个基于发布/订阅模型的消息中间件,功能要求如下:
- broker保证消息落盘后才向producer返回发送成功的ack,并把消息推送给consumer;
- consumer消费成功或失败都返回ack给broker;
- consumer消费失败、消费超时、不在线时,消息不能丢失,需要尽快重新推送,且consumer正常后可以及时消费完堆积的消息;
- 采用push模式把消息推送给consumer;
- 支持简单过滤功能,即broker只推送符合订阅条件的消息给consumer;
- broker宕机重启后,保证消息不能丢失;
- 支持consumer group,即consumer群组订阅了某topic,该topic的消息发送给其中任意一台机器都可以;
考核方式
性能指标:
每秒消息接收量,每秒消息投递量,消息投递延迟;
测试场景:
- 4k消息,一个producer发布topicA,一个consumer订阅topicA,consumer能正常消费所有消息,且无堆积;
- 4k消息,一个producer发布topicA,二十个consumer订阅topicA,consumer能正常消费所有消息,且无堆积;
- 4k消息,一个producer发布topicA,一个consumer订阅topicA,consumer消费超时,有大量堆积;
- 4k消息,一个producer发布topicA,二十个consumer订阅topicA,只有一个consumer能正常消费,其它消费者消费超时、失败、不在线,有大量堆积;
- 4k消息,二十个producer发布20个不同的topic,每个topic有二十个consumer,且每个consumer订阅不同属性值的消息,都正常消费,且无堆积;
- 4k消息,二十个producer发布20个不同的topic,每个topic有二十个consumer,且每个consumer订阅不同属性值的消息,所有消费均超时,有大量堆积。堆积一段时间后,减少90%的发送量,且消费者恢复正常,broker尽可能把堆积的消息推送出去;