コード例 #1
0
        public QueueingConsumerFactory(IEasyNetQLogger logger, IConsumerErrorStrategy consumerErrorStrategy)
        {
            this.logger = logger;
            this.consumerErrorStrategy = consumerErrorStrategy;

            // start the subscription callback thread
            // all subscription actions registered with Subscribe or Request
            // run here.
            subscriptionCallbackThread = new Thread(_ =>
            {
                try
                {
                    while (true)
                    {
                        if (disposed)
                        {
                            break;
                        }

                        HandleMessageDelivery(queue.Take());
                    }
                }
                catch (InvalidOperationException ex)
                {
                    // InvalidOperationException is thrown when Take is called after
                    // queue.CompleteAdding(), this is signals that this class is being
                    // disposed, so we allow the thread to complete.
                }
            });
            subscriptionCallbackThread.Start();
        }
コード例 #2
0
        public QueueingConsumerFactory(IConsumerErrorStrategy consumerErrorStrategy)
        {
            this.logger = Application.Current.LoggerProvider.GetLogger(RabbitMessageBus.MessageBusLoggerName);
            this.consumerErrorStrategy = consumerErrorStrategy;

            // start the subscription callback thread
            // all subscription actions registered with Subscribe or Request
            // run here.
            subscriptionCallbackThread = new Thread(_ =>
            {
                try
                {
                    while (true)
                    {
                        if (disposed) break;

                        HandleMessageDelivery(queue.Take());
                    }
                }
                catch (InvalidOperationException)
                {
                    // InvalidOperationException is thrown when Take is called after 
                    // queue.CompleteAdding(), this is signals that this class is being
                    // disposed, so we allow the thread to complete.
                }
            });
            subscriptionCallbackThread.Start();
        }
コード例 #3
0
 public void SetUp()
 {
     consumerErrorStrategy = MockRepository.GenerateStub<IConsumerErrorStrategy>();
     queueingConsumerFactory = new QueueingConsumerFactory(new ConsoleLogger(), consumerErrorStrategy);
     autoResetEvent = new AutoResetEvent(false);
     queueingConsumerFactory.SynchronisationAction = () => autoResetEvent.Set();
 }
コード例 #4
0
 public LimitedHandlerRunner(
     IConsumerErrorStrategy consumerErrorStrategy,
     RabbitMqClientOptions rabbitMqClientOptions)
     : base(consumerErrorStrategy)
 {
     _rabbitMqClientOptions = rabbitMqClientOptions;
 }
コード例 #5
0
 public void SetUp()
 {
     consumerErrorStrategy   = MockRepository.GenerateStub <IConsumerErrorStrategy>();
     queueingConsumerFactory = new QueueingConsumerFactory(new ConsoleLogger(), consumerErrorStrategy);
     autoResetEvent          = new AutoResetEvent(false);
     queueingConsumerFactory.SynchronisationAction = () => autoResetEvent.Set();
 }
コード例 #6
0
        public When_a_user_handler_is_failed()
        {
            consumerErrorStrategy = Substitute.For <IConsumerErrorStrategy>();
            consumerErrorStrategy.HandleConsumerError(null, null).ReturnsForAnyArgs(AckStrategies.Ack);

            var handlerRunner = new HandlerRunner(consumerErrorStrategy);

            var consumer = Substitute.For <IBasicConsumer>();

            channel = Substitute.For <IModel>();
            consumer.Model.Returns(channel);

            context = new ConsumerExecutionContext(
                async(body, properties, info) => throw new Exception(),
                messageInfo,
                messageProperties,
                messageBody
                );

            var handlerTask = handlerRunner.InvokeUserMessageHandlerAsync(context)
                              .ContinueWith(async x =>
            {
                var ackStrategy = await x.ConfigureAwait(false);
                return(ackStrategy(channel, 42));
            }, TaskContinuationOptions.ExecuteSynchronously)
                              .Unwrap();

            if (!handlerTask.Wait(5000))
            {
                throw new TimeoutException();
            }
        }
コード例 #7
0
        public When_a_user_handler_is_failed()
        {
            consumerErrorStrategy = Substitute.For <IConsumerErrorStrategy>();
            var eventBus = new EventBus();

            var handlerRunner = new HandlerRunner(consumerErrorStrategy, eventBus);

            Func <byte[], MessageProperties, MessageReceivedInfo, Task> userHandler = (body, properties, info) =>
                                                                                      Task.Run(() => throw new Exception());

            var consumer = Substitute.For <IBasicConsumer>();
            var channel  = Substitute.For <IModel>();

            consumer.Model.Returns(channel);

            context = new ConsumerExecutionContext(userHandler, messageInfo, messageProperties, messageBody, consumer);

            var autoResetEvent = new AutoResetEvent(false);

            eventBus.Subscribe <AckEvent>(x => autoResetEvent.Set());

            handlerRunner.InvokeUserMessageHandler(context);

            autoResetEvent.WaitOne(1000);
        }
コード例 #8
0
ファイル: HandlerRunner.cs プロジェクト: siniypin/EasyNetQ
        public HandlerRunner(IEasyNetQLogger logger, IConsumerErrorStrategy consumerErrorStrategy)
        {
            Preconditions.CheckNotNull(logger, "logger");
            Preconditions.CheckNotNull(consumerErrorStrategy, "consumerErrorStrategy");

            this.logger = logger;
            this.consumerErrorStrategy = consumerErrorStrategy;
        }
コード例 #9
0
ファイル: HandlerRunner.cs プロジェクト: vborza/EasyNetQ
        public HandlerRunner(IConsumerErrorStrategy consumerErrorStrategy, IEventBus eventBus)
        {
            Preconditions.CheckNotNull(consumerErrorStrategy, "consumerErrorStrategy");
            Preconditions.CheckNotNull(eventBus, "eventBus");

            this.consumerErrorStrategy = consumerErrorStrategy;
            this.eventBus = eventBus;
        }
コード例 #10
0
        public HandlerRunner(IEasyNetQLogger logger, IConsumerErrorStrategy consumerErrorStrategy)
        {
            Preconditions.CheckNotNull(logger, "logger");
            Preconditions.CheckNotNull(consumerErrorStrategy, "consumerErrorStrategy");

            this.logger = logger;
            this.consumerErrorStrategy = consumerErrorStrategy;
        }
コード例 #11
0
        public void SetUp()
        {
            var conventions = new Conventions
            {
                ConsumerTagConvention = () => consumerTag
            };

            consumerErrorStrategy = MockRepository.GenerateStub <IConsumerErrorStrategy>();
            consumerErrorStrategy.Stub(x => x.HandleConsumerError(null, null))
            .IgnoreArguments()
            .WhenCalled(i =>
            {
                basicDeliverEventArgs = (ConsumerExecutionContext)i.Arguments[0];
                raisedException       = (Exception)i.Arguments[1];
            });
            consumerErrorStrategy.Stub(x => x.PostExceptionAckStrategy()).Return(PostExceptionAckStrategy.ShouldAck);

            mockBuilder = new MockBuilder(x => x
                                          .Register <IConventions>(_ => conventions)
                                          .Register(_ => consumerErrorStrategy)
                                          //.Register<IEasyNetQLogger>(_ => new ConsoleLogger())
                                          );

            mockBuilder.Bus.Subscribe <MyMessage>(subscriptionId, message =>
            {
                throw originalException;
            });


            const string text = "Hello there, I am the text!";

            originalMessage = new MyMessage {
                Text = text
            };

            var body = new JsonSerializer().MessageToBytes(originalMessage);

            // deliver a message
            mockBuilder.Consumers[0].HandleBasicDeliver(
                consumerTag,
                deliveryTag,
                false, // redelivered
                typeName,
                "#",
                new BasicProperties
            {
                Type          = typeName,
                CorrelationId = correlationId
            },
                body);

            // wait for the subscription thread to handle the message ...
            var autoResetEvent          = new AutoResetEvent(false);
            var handlerExecutionContext = (HandlerRunner)mockBuilder.ServiceProvider.Resolve <IHandlerRunner>();

            handlerExecutionContext.SynchronisationAction = () => autoResetEvent.Set();
            autoResetEvent.WaitOne(1000);
        }
コード例 #12
0
ファイル: SubscribeTests.cs プロジェクト: y2ket/EasyNetQ
        public When_the_handler_throws_an_exception()
        {
            var conventions = new Conventions(new DefaultTypeNameSerializer())
            {
                ConsumerTagConvention = () => consumerTag
            };

            consumerErrorStrategy = Substitute.For <IConsumerErrorStrategy>();
            consumerErrorStrategy.HandleConsumerError(default, null)
コード例 #13
0
        public When_the_handler_throws_an_exception()
        {
            var conventions = new Conventions(new TypeNameSerializer())
            {
                ConsumerTagConvention = () => consumerTag
            };

            consumerErrorStrategy = Substitute.For <IConsumerErrorStrategy>();
            consumerErrorStrategy.HandleConsumerError(null, null)
            .ReturnsForAnyArgs(i =>
            {
                basicDeliverEventArgs = (ConsumerExecutionContext)i[0];
                raisedException       = (Exception)i[1];
                return(AckStrategies.Ack);
            });

            mockBuilder = new MockBuilder(x => x
                                          .Register <IConventions>(_ => conventions)
                                          .Register(_ => consumerErrorStrategy)
                                          //.Register<IEasyNetQLogger>(_ => new ConsoleLogger())
                                          );

            mockBuilder.Bus.Subscribe <MyMessage>(subscriptionId, message =>
            {
                throw originalException;
            });


            const string text = "Hello there, I am the text!";

            originalMessage = new MyMessage {
                Text = text
            };

            var body = new JsonSerializer(new TypeNameSerializer()).MessageToBytes(originalMessage);

            // deliver a message
            mockBuilder.Consumers[0].HandleBasicDeliver(
                consumerTag,
                deliveryTag,
                false, // redelivered
                typeName,
                "#",
                new BasicProperties
            {
                Type          = typeName,
                CorrelationId = correlationId
            },
                body);

            // wait for the subscription thread to handle the message ...
            var autoResetEvent = new AutoResetEvent(false);

            mockBuilder.EventBus.Subscribe <AckEvent>(x => autoResetEvent.Set());
            autoResetEvent.WaitOne(1000);
        }
コード例 #14
0
ファイル: HandlerRunner.cs プロジェクト: jonstelly/EasyNetQ
        public HandlerRunner(IEasyNetQLogger logger, IConsumerErrorStrategy consumerErrorStrategy, IEventBus eventBus)
        {
            Preconditions.CheckNotNull(logger, "logger");
            Preconditions.CheckNotNull(consumerErrorStrategy, "consumerErrorStrategy");
            Preconditions.CheckNotNull(eventBus, "eventBus");

            this.logger = logger;
            this.consumerErrorStrategy = consumerErrorStrategy;
            this.eventBus = eventBus;
        }
コード例 #15
0
        public HandlerRunner(IEasyNetQLogger logger, IConsumerErrorStrategy consumerErrorStrategy, IEventBus eventBus)
        {
            Preconditions.CheckNotNull(logger, "logger");
            Preconditions.CheckNotNull(consumerErrorStrategy, "consumerErrorStrategy");
            Preconditions.CheckNotNull(eventBus, "eventBus");

            this.logger = logger;
            this.consumerErrorStrategy = consumerErrorStrategy;
            this.eventBus = eventBus;
        }
コード例 #16
0
        protected void SetUp()
        {
            ConsumerErrorStrategy = MockRepository.GenerateStub<IConsumerErrorStrategy>();

            IConventions conventions = new Conventions(new TypeNameSerializer())
                {
                    ConsumerTagConvention = () => ConsumerTag
                };
            MockBuilder = new MockBuilder(x => x
                    .Register(_ => conventions)
                    .Register(_ => ConsumerErrorStrategy)
                    //.Register<IEasyNetQLogger>(_ => new ConsoleLogger())
                );

            AdditionalSetUp();
        }
コード例 #17
0
ファイル: ConsumerTestBase.cs プロジェクト: winhu/EasyNetQ
        protected void SetUp()
        {
            ConsumerErrorStrategy = MockRepository.GenerateStub <IConsumerErrorStrategy>();

            IConventions conventions = new Conventions(new TypeNameSerializer())
            {
                ConsumerTagConvention = () => ConsumerTag
            };

            MockBuilder = new MockBuilder(x => x
                                          .Register(_ => conventions)
                                          .Register(_ => ConsumerErrorStrategy)
                                          //.Register<IEasyNetQLogger>(_ => new ConsoleLogger())
                                          );

            AdditionalSetUp();
        }
コード例 #18
0
ファイル: ConsumerTestBase.cs プロジェクト: stemarie/EasyNetQ
        protected void SetUp()
        {
            ConsumerErrorStrategy = MockRepository.GenerateStub<IConsumerErrorStrategy>();
            ConsumerErrorStrategy.Stub(x => x.PostExceptionAckStrategy()).Return(PostExceptionAckStrategy.ShouldAck);

            IConventions conventions = new Conventions
                {
                    ConsumerTagConvention = () => ConsumerTag
                };
            MockBuilder = new MockBuilder(x => x
                    .Register(_ => conventions)
                    .Register(_ => ConsumerErrorStrategy)
                    //.Register<IEasyNetQLogger>(_ => new ConsoleLogger())
                );

            AdditionalSetUp();
        }
コード例 #19
0
        protected void SetUp()
        {
            ConsumerErrorStrategy = MockRepository.GenerateStub <IConsumerErrorStrategy>();
            ConsumerErrorStrategy.Stub(x => x.PostExceptionAckStrategy()).Return(PostExceptionAckStrategy.ShouldAck);

            IConventions conventions = new Conventions
            {
                ConsumerTagConvention = () => ConsumerTag
            };

            MockBuilder = new MockBuilder(x => x
                                          .Register(_ => conventions)
                                          .Register(_ => ConsumerErrorStrategy)
                                          //.Register<IEasyNetQLogger>(_ => new ConsoleLogger())
                                          );

            AdditionalSetUp();
        }
コード例 #20
0
ファイル: ConsumerTestBase.cs プロジェクト: y2ket/EasyNetQ
        public ConsumerTestBase()
        {
            Cancellation = new CancellationTokenSource();

            ConsumerErrorStrategy = Substitute.For <IConsumerErrorStrategy>();

            IConventions conventions = new Conventions(new DefaultTypeNameSerializer())
            {
                ConsumerTagConvention = () => ConsumerTag
            };

            MockBuilder = new MockBuilder(x => x
                                          .Register(conventions)
                                          .Register(ConsumerErrorStrategy)
                                          );

            AdditionalSetUp();
        }
コード例 #21
0
        public QueueingConsumerFactory(IEasyNetQLogger logger, IConsumerErrorStrategy consumerErrorStrategy)
        {
            this.logger = logger;
            this.consumerErrorStrategy = consumerErrorStrategy;

            // start the subscription callback thread
            // all subscription actions registered with Subscribe or Request
            // run here.
            subscriptionCallbackThread = new Thread(_ =>
            {
                while(true)
                {
                    if (disposed) break;

                    HandleMessageDelivery(queue.Take());
                }
            });
            subscriptionCallbackThread.Start();
        }
コード例 #22
0
        public ConsumerTestBase()
        {
            Cancellation = new CancellationTokenSource();

            ConsumerErrorStrategy = Substitute.For <IConsumerErrorStrategy>();

            IConventions conventions = new Conventions(new TypeNameSerializer())
            {
                ConsumerTagConvention = () => ConsumerTag
            };

            MockBuilder = new MockBuilder(x => x
                                          .Register(_ => conventions)
                                          .Register(_ => ConsumerErrorStrategy)
                                          //.Register<IEasyNetQLogger>(_ => new ConsoleLogger())
                                          );

            AdditionalSetUp();
        }
コード例 #23
0
        public QueueingConsumerFactory(IEasyNetQLogger logger, IConsumerErrorStrategy consumerErrorStrategy)
        {
            this.logger = logger;
            this.consumerErrorStrategy = consumerErrorStrategy;

            // start the subscription callback thread
            // all subscription actions registered with Subscribe or Request
            // run here.
            subscriptionCallbackThread = new Thread(_ =>
            {
                while (true)
                {
                    if (disposed)
                    {
                        break;
                    }

                    try
                    {
                        BasicDeliverEventArgs deliverEventArgs;
                        lock (sharedQueueLock)
                        {
                            deliverEventArgs = (BasicDeliverEventArgs)sharedQueue.Dequeue();
                        }
                        if (deliverEventArgs != null)
                        {
                            HandleMessageDelivery(deliverEventArgs);
                        }
                    }
                    catch (EndOfStreamException)
                    {
                        // do nothing here, EOS fired when queue is closed
                        // Looks like the connection has gone away, so wait a little while
                        // before continuing to poll the queue
                        Thread.Sleep(10);
                    }
                }
            });
            subscriptionCallbackThread.Start();
        }
コード例 #24
0
        public QueueingConsumerFactory(IEasyNetQLogger logger, IConsumerErrorStrategy consumerErrorStrategy)
        {
            this.logger = logger;
            this.consumerErrorStrategy = consumerErrorStrategy;

            // start the subscription callback thread
            // all subscription actions registered with Subscribe or Request
            // run here.
            subscriptionCallbackThread = new Thread(_ =>
            {
                while(true)
                {
                    if (disposed) break;

                    try
                    {
                        BasicDeliverEventArgs deliverEventArgs;
                        lock (sharedQueueLock)
                        {
                            deliverEventArgs = (BasicDeliverEventArgs)sharedQueue.Dequeue();
                        }
                        if(deliverEventArgs != null)
                        {
                            HandleMessageDelivery(deliverEventArgs);
                        }
                    }
                    catch (EndOfStreamException)
                    {
                        // do nothing here, EOS fired when queue is closed
                        // Looks like the connection has gone away, so wait a little while
                        // before continuing to poll the queue
                        Thread.Sleep(10);
                    }
                }
            });
            subscriptionCallbackThread.Start();
        }
コード例 #25
0
ファイル: BusBuilder.cs プロジェクト: sebfia/EasyNetQ
        IBus IBusBuilder.CreateBus()
        {
            _logger.DebugWrite("Creating bus.");

            if (_connectionFactory == null)
            {
                _logger.DebugWrite("Using default connection factory.");
                _connectionFactory = CreateDefaultConnectionFactory();
            }

            if (_consumerErrorStrategy == null)
            {
                _logger.DebugWrite("Using default consumer error strategy.");
                _consumerErrorStrategy = CreateDefaultConsumerErrorStrategy();
            }

            return new RabbitBus(
                TypeNameSerializer.Serialize,
                _serializer,
                new QueueingConsumerFactory(_logger, _consumerErrorStrategy),
                _connectionFactory,
                _logger,
                CorrelationIdGenerator.GetCorrelationId);
        }
コード例 #26
0
        public void SetUp()
        {
            var conventions = new Conventions(new TypeNameSerializer())
            {
                ConsumerTagConvention = () => consumerTag
            };

            consumerErrorStrategy = MockRepository.GenerateStub<IConsumerErrorStrategy>();
            consumerErrorStrategy.Stub(x => x.HandleConsumerError(null, null))
                .IgnoreArguments()
                .WhenCalled(i =>
                {
                    basicDeliverEventArgs = (ConsumerExecutionContext)i.Arguments[0];
                    raisedException = (Exception) i.Arguments[1];
                }).Return(AckStrategies.Ack);

            mockBuilder = new MockBuilder(x => x
                .Register<IConventions>(_ => conventions)
                .Register(_ => consumerErrorStrategy)
                //.Register<IEasyNetQLogger>(_ => new ConsoleLogger())
                );

            mockBuilder.Bus.Subscribe<MyMessage>(subscriptionId, message =>
            {
                throw originalException;
            });

            const string text = "Hello there, I am the text!";
            originalMessage = new MyMessage { Text = text };

            var body = new JsonSerializer(new TypeNameSerializer()).MessageToBytes(originalMessage);

            // deliver a message
            mockBuilder.Consumers[0].HandleBasicDeliver(
                consumerTag,
                deliveryTag,
                false, // redelivered
                typeName,
                "#",
                new BasicProperties
                {
                    Type = typeName,
                    CorrelationId = correlationId
                },
                body);

            // wait for the subscription thread to handle the message ...
            var autoResetEvent = new AutoResetEvent(false);
            mockBuilder.EventBus.Subscribe<AckEvent>(x => autoResetEvent.Set());
            autoResetEvent.WaitOne(1000);
        }
コード例 #27
0
 /// <summary>
 /// Initializes a new instance of the <see cref="PollyHandlerRunner"/> class.
 /// </summary>
 /// <param name="logger">A reference to an EasyNetQ logger implementation.</param>
 /// <param name="consumerErrorStrategy">A reference to a consumer error strategy.</param>
 /// <param name="eventBus">A reference to an event bus.</param>
 /// <param name="policy">A reference to the policy within which message consumers will be executed.</param>
 public PollyHandlerRunner(IEasyNetQLogger logger, IConsumerErrorStrategy consumerErrorStrategy, IEventBus eventBus, Policy policy)
     : base(logger, consumerErrorStrategy, eventBus)
 {
     _logger = logger ?? throw new ArgumentNullException(nameof(logger));
     _policy = policy ?? throw new ArgumentNullException(nameof(policy));
 }
コード例 #28
0
        public void SetUp()
        {
            _model = MockRepository.GenerateMock<IModel>();
            _model.Stub(x => x.CreateBasicProperties())
                .Return(new BasicProperties());
            _model.Stub(x => x.BasicPublish(null, null, null, null))
                .IgnoreArguments();
            _model.Replay();

            _connection = MockRepository.GenerateMock<IConnection>();
            _connection.Stub(x => x.CreateModel()).Return(_model);
            _connection.Replay();

            _connectionFactory = MockRepository.GenerateMock<IConnectionFactory>();
            _connectionFactory.Stub(x => x.CreateConnection()).Return(_connection);
            _connectionFactory.Replay();

            _logger = MockRepository.GenerateMock<IEasyNetQLogger>();
            _logger.Replay();

            _fallbackStrategy = MockRepository.GenerateMock<IConsumerErrorStrategy>();
            _fallbackStrategy.Stub(x => x.HandleConsumerError(null, null))
                .IgnoreArguments();
            _fallbackStrategy.Replay();

            _sut = new RetryConsumerErrorStrategy(
                _connectionFactory,
                _fallbackStrategy,
                _logger);
        }
コード例 #29
0
 public When_a_user_handler_is_cancelled()
 {
     consumerErrorStrategy = Substitute.For <IConsumerErrorStrategy>();
     consumerErrorStrategy.HandleConsumerCancelled(default).ReturnsForAnyArgs(AckStrategies.Ack);
コード例 #30
0
 /// <summary>
 /// Initializes a new instance of the <see cref="PollyHandlerRunner"/> class.
 /// </summary>
 /// <param name="logger">A reference to an EasyNetQ logger implementation.</param>
 /// <param name="consumerErrorStrategy">A reference to a consumer error strategy.</param>
 /// <param name="policy">A reference to the policy within which message consumers will be executed.</param>
 public PollyHandlerRunner(ILog logger, IConsumerErrorStrategy consumerErrorStrategy, Policy policy)
     : base(consumerErrorStrategy)
 {
     _logger = logger ?? throw new ArgumentNullException(nameof(logger));
     _policy = policy ?? throw new ArgumentNullException(nameof(policy));
 }
コード例 #31
0
ファイル: HandlerRunner.cs プロジェクト: y2ket/EasyNetQ
        public HandlerRunner(IConsumerErrorStrategy consumerErrorStrategy)
        {
            Preconditions.CheckNotNull(consumerErrorStrategy, "consumerErrorStrategy");

            this.consumerErrorStrategy = consumerErrorStrategy;
        }
コード例 #32
0
 public HandlerRunner(IConsumerErrorStrategy consumerErrorStrategy)
 {
     this.consumerErrorStrategy = consumerErrorStrategy;
 }
コード例 #33
0
 public RetryConsumerErrorStrategy(
     IConnectionFactory connectionFactory,
     IConsumerErrorStrategy fallbackStrategy,
     IEasyNetQLogger logger
     )
 {
     _connectionFactory = connectionFactory;
     _fallbackStrategy = fallbackStrategy;
     _logger = logger;
     MaxNumberOfRetries = 3;
 }