示例#1
0
        public Consumer(IModel model, string queueName, ushort prefetchCount = 5)
        {
            _model = model;

            _model.BasicQos(0, prefetchCount, false);

            var consumer = new EventingBasicConsumer(_model);

            MessageSource = Observable.FromEvent <EventHandler <BasicDeliverEventArgs>, BasicDeliverEventArgs>(
                // Conversion.
                action => (sender, e) => action(e),
                // Add handler / observer.
                handler =>
            {
                consumer.Received += handler;

                if (!consumer.IsRunning)
                {
                    _model.BasicConsume(queue: queueName, autoAck: false, consumer: consumer);
                }
            },
                // Remove handler / observer.
                handler =>
            {
                if (consumer.IsRunning)
                {
                    consumer.OnCancel();
                }

                consumer.Received -= handler;
            })
                            .Select(queueMessage => new Message <T>(_model, queueMessage));
        }