Пример #1
0
  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));
          }
        };
  }
Пример #2
0
 @Override
 public final void flush() {
   AMQPConnection<?> connection = _target.getSessionModel().getAMQPConnection();
   try {
     connection.alwaysAllowMessageAssignmentInThisThreadIfItIsIOThread(true);
     _queue.flushConsumer(this);
     _target.processPending();
   } finally {
     connection.alwaysAllowMessageAssignmentInThisThreadIfItIsIOThread(false);
   }
 }
Пример #3
0
 @Override
 public AMQSessionModel getSessionModel() {
   return _target.getSessionModel();
 }