code: public void  put(MessageExchange messageExchange) throws InterruptedException, BufferStoppedException {
          synchronized (status) {
              if (status.isRunning()) {
                  requests.put(messageExchange);
                  listener.valuesChanged(this, consumersIdle(), requestsWaiting());
                  diagnose("Put one request into buffer.");
              } else {
                  throw new BufferStoppedException();
              }
          }
      }
docs: Inserts the request wrapped in the given <code>MessageExchange</code> at the end of the buffer. The
  response related to the request will be  put into the <code>MessageExchange</code> as soon as
  available.
  
  @param messageExchange
  <code>MessageExchange</code> to insert into the buffer, must not be <code>null</code>.
  
  @throws BufferStoppedException
  thrown if the buffer is already closed and requests are not accepted anymore.
  @throws InterruptedException
  should never happen as items can always immediately  be added to the buffer