private void setupLogging() {
   final String filterLogString = getFilterLogString();
   getEventLogger()
       .message(
           this,
           SubscriptionMessages.CREATE(
               filterLogString, _queue.isDurable() && _exclusive, filterLogString.length() > 0));
 }
 @Override
 public final void flush() {
   AMQPConnection<?> connection = _target.getSessionModel().getAMQPConnection();
   try {
     connection.alwaysAllowMessageAssignmentInThisThreadIfItIsIOThread(true);
     _queue.flushConsumer(this);
     _target.processPending();
   } finally {
     connection.alwaysAllowMessageAssignmentInThisThreadIfItIsIOThread(false);
   }
 }
 @Override
 protected void onClose() {
   if (_closed.compareAndSet(false, true)) {
     _target.getSendLock();
     try {
       _waitingOnCreditMessageListener.remove();
       _target.consumerRemoved(this);
       _target.removeStateChangeListener(_listener);
       _queue.unregisterConsumer(this);
       deleted();
     } finally {
       _target.releaseSendLock();
     }
   }
 }
  QueueConsumerImpl(
      final AbstractQueue<?> queue,
      ConsumerTarget target,
      final String consumerName,
      final FilterManager filters,
      final Class<? extends ServerMessage> messageClass,
      EnumSet<Option> optionSet) {
    super(
        parentsMap(queue, target.getSessionModel().getModelObject()),
        createAttributeMap(consumerName, filters, optionSet));
    _messageClass = messageClass;
    _sessionReference = target.getSessionModel().getConnectionReference();
    _consumerNumber = CONSUMER_NUMBER_GENERATOR.getAndIncrement();
    _filters = filters;
    _acquires = optionSet.contains(Option.ACQUIRES);
    _seesRequeues = optionSet.contains(Option.SEES_REQUEUES);
    _isTransient = optionSet.contains(Option.TRANSIENT);
    _target = target;
    _queue = queue;

    // Access control
    authoriseCreate(this);

    open();

    setupLogging();

    _listener =
        new StateChangeListener<ConsumerTarget, ConsumerTarget.State>() {
          @Override
          public void stateChanged(
              final ConsumerTarget object,
              final ConsumerTarget.State oldState,
              final ConsumerTarget.State newState) {
            targetStateChanged(oldState, newState);
          }
        };
    _target.addStateListener(_listener);

    _suspendedConsumerLoggingTicker =
        new SuspendedConsumerLoggingTicker(
            queue.getContextValue(Long.class, Consumer.SUSPEND_NOTIFICATION_PERIOD)) {
          @Override
          protected void log(final long period) {
            getEventLogger().message(getLogSubject(), SubscriptionMessages.STATE(period));
          }
        };
  }
 private EventLogger getEventLogger() {
   return _queue.getEventLogger();
 }
 @Override
 public void acquisitionRemoved(final QueueEntry node) {
   _target.acquisitionRemoved(node);
   _queue.decrementUnackedMsgCount(node);
 }
 @Override
 public void externalStateChange() {
   _queue.deliverAsync();
 }
 @Override
 protected SecurityManager getSecurityManager() {
   return _queue.getVirtualHost().getSecurityManager();
 }