code: @Override
      public IQueueMessage<ID, DATA> take() throws QueueException.EphemeralIsFull {
          if (!isEphemeralDisabled()) {
              int ephemeralMaxSize = getEphemeralMaxSize();
              if (ephemeralMaxSize > 0 && ephemeralStorage.size() >= ephemeralMaxSize) {
                  throw new QueueException.EphemeralIsFull(ephemeralMaxSize);
              }
          }
          IQueueMessage<ID, DATA> msg = takeFromRingBuffer();
          if (msg != null && !isEphemeralDisabled()) {
              ephemeralStorage.putIfAbsent(msg.getId(), msg);
          }
          return msg;
      }
docs: {@inheritDoc}
  
  @throws QueueException.EphemeralIsFull
  if the ephemeral storage is full