Example #1
0
        /// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="producer">the producer in charge of redirecting erroneous objects.</param>
        /// <param name="listener">the listener to decorate.</param>
        /// <param name="errorTopic">the error topic used.</param>
        /// <exception cref="ArgumentNullException">if any of the method parameters is <code>null</code>.</exception>
        public GojulMQFailedMessageListener(IGojulMQMessageProducer <T> producer,
                                            GojulMQMessageListener <T> listener, string errorTopic)
        {
            Condition.Requires(producer).IsNotNull();
            Condition.Requires(listener).IsNotNull();
            Condition.Requires(errorTopic).IsNotNullOrWhiteSpace();

            this._producer   = producer;
            this._listener   = listener;
            this._errorTopic = errorTopic;
        }
Example #2
0
        /// <see cref="IGojulMQMessageConsumer{T}.ConsumeMessages(string, OnMessage{T}, CancellationToken)"/>
        public void ConsumeMessages(string topic, GojulMQMessageListener <T> messageListener,
                                    CancellationToken cancellationToken)
        {
            Condition.Requires(topic, "topic").IsNotNull().IsNotEmpty();
            Condition.Requires(messageListener, "messageListener").IsNotNull();
            // CancellationToken cannot be null as it is a struct.

            _consumer.Subscribe(topic);

            try
            {
                while (!cancellationToken.IsCancellationRequested)
                {
                    int count = 0;

                    var msg = _consumer.Consume(cancellationToken);
                    while (!cancellationToken.IsCancellationRequested)
                    {
                        // We try to commit on every 100 messages, or when
                        // the cancellation token has been triggered.
                        if (msg != null)
                        {
                            messageListener(msg.Value);
                            count++;
                            if (count % 100 == 0)
                            {
                                _consumer.Commit();
                                count = 0;
                            }
                        }
                        msg = _consumer.Consume(cancellationToken);
                    }

                    if (count > 0)
                    {
                        _consumer.Commit();
                    }
                }
            }
            catch (KafkaException e)
            {
                _log.Fatal(e, string.Format("A fatal error occured : {0} - aborting the consumer", e.Message));
                throw new GojulMQException("Kafka error encountered", e);
            }

            cancellationToken.ThrowIfCancellationRequested();
        }