rocketmq-baiji / rocketmq

Mirror of Apache RocketMQ
Apache License 2.0
4 stars 20 forks source link

百技8组 第三题 #9

Open yu961549745 opened 5 years ago

yu961549745 commented 5 years ago

全局排序 Pull Consumer 实现

  1. MQPullConsumerpull操作封装在BufferedMq中, 提供peekpoll方法, 自动根据指定的bufferSize刷新消息.
  2. 基于java.util.PriorityQueue实现多路归并, 按照MessageExt.getBornTimestamp进行排序.
    public MessageExt receive() {
    if (priorityQueue.isEmpty()) {
        return null;
    }
    BufferedMq mq = priorityQueue.poll();
    MessageExt msg = mq.poll();
    if (mq.peek() != null) {
        priorityQueue.add(mq);
    }
    return msg;
    }