public void add(Message message) {
    if (message == null) throw new NullPointerException("Message must not be null");

    if (size == max) throw new QueueFullException("Queue reached max size: " + max);

    boolean increment = true;

    if (message instanceof RealtimeMessage) {
      increment = !realtimeQueue.addRemoves(message);
    } else if (message instanceof PriorityMessage) {
      priorityQueue.add(message);
    } else if (message instanceof OrderedMessage) {
      orderedQueue.add(message);
    } else {
      basicQueue.add(message);
    }

    if (increment) size++;
    total++;
  }