public Message poll() {
    if (isEmpty()) return null;

    Message m = realtimeQueue.poll();
    if (m == null) {
      m = priorityQueue.poll();
    }
    if (m == null) {
      m = orderedQueue.poll();
    }
    if (m == null) {
      m = basicQueue.poll();
    }
    if (size > 0) size--;

    return m;
  }