예제 #1
0
        /// <summary>
        /// KafkaConsumerActor
        /// </summary>
        /// <param name="owner">Owner actor to send critical failures to</param>
        /// <param name="settings">Consumer settings</param>
        /// <param name="statisticsHandler">Statistics handler</param>
        /// <param name="decider"></param>
        /// <param name="partitionEventHandler">Partion events handler</param>
        public KafkaConsumerActor(IActorRef owner, ConsumerSettings <K, V> settings, Decider decider, IPartitionEventHandler partitionEventHandler, IStatisticsHandler statisticsHandler)
        {
            _owner                 = owner;
            _settings              = settings;
            _decider               = decider;
            _statisticsHandler     = statisticsHandler;
            _partitionEventHandler = partitionEventHandler;

            var restrictedConsumerTimeoutMs = Math.Round(_settings.PartitionHandlerWarning.TotalMilliseconds * 0.95);

            _restrictedConsumer = new RestrictedConsumer <K, V>(_consumer, TimeSpan.FromMilliseconds(restrictedConsumerTimeoutMs));
            _warningDuration    = _settings.PartitionHandlerWarning;

            _pollMessage        = new Internal.Poll <K, V>(this, periodic: true);
            _delayedPollMessage = new Internal.Poll <K, V>(this, periodic: false);
            _log = Context.GetLogger();
        }
예제 #2
0
        public GroupByProcessorImpl(ActorMaterializerSettings settings, int maxSubstreams, Func <object, object> keyFor) : base(settings)
        {
            _maxSubstreams = maxSubstreams;
            _keyFor        = keyFor;
            _decider       = settings.SupervisionDecider;
            var waitFirst = new TransferPhase(PrimaryInputs.NeedsInput.And(PrimaryOutputs.NeedsDemand), () =>
            {
                var element = PrimaryInputs.DequeueInputElement();
                object key;
                if (TryKeyFor(element, out key))
                {
                    NextPhase(OpenSubstream(element, key));
                }
            });

            _waitNext = new TransferPhase(PrimaryInputs.NeedsInput, () =>
            {
                var element = PrimaryInputs.DequeueInputElement();
                object key;
                if (TryKeyFor(element, out key))
                {
                    SubstreamOutput substream;
                    if (_keyToSubstreamOutput.TryGetValue(key, out substream))
                    {
                        if (substream.IsOpen)
                        {
                            NextPhase(DispatchToSubstream(element, substream));
                        }
                    }
                    else if (PrimaryOutputs.IsOpen)
                    {
                        NextPhase(OpenSubstream(element, key));
                    }
                }
            });

            InitialPhase(1, waitFirst);
        }
 /// <summary>
 /// Gets actor props
 /// </summary>
 internal static Props GetProps <K, V>(IActorRef owner, ConsumerSettings <K, V> settings, Decider decider, IPartitionEventHandler handler, IStatisticsHandler statisticsHandler) =>
 Props.Create(() => new KafkaConsumerActor <K, V>(owner, settings, decider, handler, statisticsHandler)).WithDispatcher(settings.DispatcherId);
 /// <summary>
 /// Gets actor props
 /// </summary>
 public static Props GetProps <K, V>(ConsumerSettings <K, V> settings, Decider decider) =>
 Props.Create(() => new KafkaConsumerActor <K, V>(ActorRefs.Nobody, settings, decider, new PartitionEventHandlers.Empty(), new StatisticsHandlers.Empty())).WithDispatcher(settings.DispatcherId);
 public ExternalPlainSourceIntegrationTests(ITestOutputHelper output, KafkaFixture fixture)
     : base(nameof(ExternalPlainSourceIntegrationTests), output, fixture)
 {
     _defaultDecider = new DefaultConsumerDecider(true).Decide;
 }