protected void SetupQueueAndSenderAndListener(string connectionString)
 {
     connectionManager = SetupRabbitMqConnectionManager(connectionString);
     EnsureRabbitQueueExists(QueueName);
     SetupMessageSender();
     SetupQueueListener(QueueName);
 }
예제 #2
0
        public void Stop_WhenConnectionCloseRaisesNonEndOfStreamException_DoesBubbleException()
        {
            var dateTimeProvider     = new Mock <IDateTimeProvider>();
            var logger               = new Mock <ILogger>();
            var configurationManager = new Mock <IConfigurationManager>();

            configurationManager.Setup(x => x.Get <string>("QueueUri")).Returns("amqp://*****:*****@localhost:5672");
            var model      = new Mock <IModel>();
            var connection = new Mock <IConnection>();

            connection.Setup(x => x.CreateModel()).Returns(model.Object);
            connection.Setup(x => x.Dispose()).Throws <Exception>();

            var connectionFactory = new Mock <IConnectionFactory>();

            connectionFactory.Setup(x => x.Uri).Returns(new Uri("amqp://*****:*****@localhost:5672"));
            connectionFactory.Setup(x => x.CreateConnection()).Returns(connection.Object);

            var rabbitMqConnectionManager = new RabbitMqConnectionManager(connectionFactory.Object, configurationManager.Object);

            var rabbitMqWrapper = new RabbitMqWrapper(dateTimeProvider.Object, logger.Object, configurationManager.Object, rabbitMqConnectionManager, _metrics);

            rabbitMqWrapper.Start();
            rabbitMqWrapper.Stop();
            rabbitMqConnectionManager.Dispose();
        }
예제 #3
0
        public void Stop_WhenCalledAfterStart_CallsModelDispose()
        {
            var dateTimeProvider     = new Mock <IDateTimeProvider>();
            var logger               = new Mock <ILogger>();
            var configurationManager = new Mock <IConfigurationManager>();

            configurationManager.Setup(x => x.Get <string>("QueueUri")).Returns("amqp://*****:*****@localhost:5672");
            var model      = new Mock <IModel>();
            var connection = new Mock <IConnection>();

            connection.Setup(x => x.CreateModel()).Returns(model.Object);

            var connectionFactory = new Mock <IConnectionFactory>();

            connectionFactory.Setup(x => x.Uri).Returns(new Uri("amqp://*****:*****@localhost:5672"));
            connectionFactory.Setup(x => x.CreateConnection()).Returns(connection.Object);

            var mqConnectionManager = new RabbitMqConnectionManager(connectionFactory.Object, configurationManager.Object);

            var rabbitMqWrapper = new RabbitMqWrapper(dateTimeProvider.Object, logger.Object, configurationManager.Object, mqConnectionManager, _metrics);

            rabbitMqWrapper.Start();
            rabbitMqWrapper.Stop();

            model.Verify(x => x.Dispose(), Times.Once);
        }
        public static async Task Main()
        {
            var          rabbitMqConnectionManager = new RabbitMqConnectionManager(new Uri("amqp://localhost"), "test", TimeSpan.FromSeconds(30));
            const string queueName = "some-queue-name";
            var          options   = new RabbitMqServiceOptionsBuilder()
                                     .WithRetry(TimeSpan.FromSeconds(15), null, TimeSpan.FromSeconds(1))
                                     .WithDeliveryMode(DeliveryMode.Persistent)
                                     .WithConnectionManager(rabbitMqConnectionManager)
                                     .WithDefaultSerializer(message => Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(message)), "application/json")
                                     .Build();
            var serviceClient = new RabbitMqServiceClient(options);

            // Create a queue
            await serviceClient.CreateQueueAsync(queueName + "-Error", true);

            // Create a queue with options builder
            var createQueueOption = new CreateQueueOptionsBuilder(QueueType.Classic)
                                    .Durable()
                                    .WithDeadLetterExchange(RabbitMqConstants.DefaultExchangeName)
                                    .WithDeadLetterRoutingKey(queueName + "-Error")
                                    .Build();
            await serviceClient.CreateQueueAsync(queueName, createQueueOption);

            // Listen to queue (Auto reconnect is enabled)
            var consumerOptions = new ConsumerOptionsBuilder <string>()
                                  .WithDefaultDeSerializer(message => JsonConvert.DeserializeObject <string>(Encoding.UTF8.GetString(message.Span)))
                                  .WithSimpleMessageAck()
                                  .WithCustomPipe(async(context, next) =>
            {
                Console.WriteLine("Some logging message before processing");
                await next();
                Console.WriteLine("Some logging message after processing");
            })
                                  .Build();
            var activeConsumer = await serviceClient.StartListeningQueueAsync(queueName, consumerOptions, (message, items, ct) =>
            {
                Console.WriteLine(message);
                return(Task.CompletedTask);
            });

            // Enqueue a message
            await serviceClient.EnqueueMessageAsync(queueName, "some-message");

            await Task.Delay(100);

            // Enqueue using EnqueueQueueClient
            var queueClient = serviceClient.CreateQueueClient(queueName);
            await queueClient.EnqueueMessageAsync("some-other-message");

            // Cancel listening
            activeConsumer.Cancel();

            // Purge the queue
            await serviceClient.PurgeQueueAsync(queueName);

            // Delete a queue
            await serviceClient.DeleteQueueAsync(queueName, false, false);

            await serviceClient.DeleteQueueAsync(queueName + "-Error", false, false);
        }
        public void SetUp()
        {
            routingTopology  = new ConventionalRoutingTopology();
            receivedMessages = new BlockingCollection <TransportMessage>();

            var config = new ConnectionConfiguration();

            config.ParseHosts("localhost:5672");

            var selectionStrategy = new DefaultClusterHostSelectionStrategy <ConnectionFactoryInfo>();
            var connectionFactory = new ConnectionFactoryWrapper(config, selectionStrategy);

            connectionManager = new RabbitMqConnectionManager(connectionFactory, config);

            unitOfWork = new RabbitMqUnitOfWork
            {
                ConnectionManager      = connectionManager,
                UsePublisherConfirms   = true,
                MaxWaitTimeForConfirms = TimeSpan.FromSeconds(10)
            };

            sender = new RabbitMqMessageSender
            {
                UnitOfWork      = unitOfWork,
                RoutingTopology = routingTopology
            };


            dequeueStrategy = new RabbitMqDequeueStrategy
            {
                ConnectionManager = connectionManager,
                PurgeOnStartup    = true
            };

            MakeSureQueueAndExchangeExists(ReceiverQueue);


            MessagePublisher = new RabbitMqMessagePublisher
            {
                UnitOfWork      = unitOfWork,
                RoutingTopology = routingTopology
            };
            subscriptionManager = new RabbitMqSubscriptionManager
            {
                ConnectionManager = connectionManager,
                EndpointQueueName = ReceiverQueue,
                RoutingTopology   = routingTopology
            };

            dequeueStrategy.Init(Address.Parse(ReceiverQueue), TransactionSettings.Default, m =>
            {
                receivedMessages.Add(m);
                return(true);
            }, (s, exception) => { });

            dequeueStrategy.Start(MaximumConcurrency);
        }
        static RabbitMqConnectionManager SetupRabbitMqConnectionManager(string connectionString)
        {
            var config = new ConnectionStringParser(new SettingsHolder()).Parse(connectionString);
            //            config.OverrideClientProperties();
            var connectionFactory    = new RabbitMqConnectionFactory(config);
            var newConnectionManager = new RabbitMqConnectionManager(connectionFactory, config);

            return(newConnectionManager);
        }
        static RabbitMqConnectionManager SetupRabbitMqConnectionManager(string connectionString)
        {
            var config = new ConnectionStringParser().Parse(connectionString);
//            config.OverrideClientProperties();
            var selectionStrategy    = new DefaultClusterHostSelectionStrategy <ConnectionFactoryInfo>();
            var connectionFactory    = new ConnectionFactoryWrapper(config, selectionStrategy);
            var newConnectionManager = new RabbitMqConnectionManager(connectionFactory, config);

            return(newConnectionManager);
        }
        public void SetUp()
        {
            routingTopology = new ConventionalRoutingTopology();
            receivedMessages = new BlockingCollection<TransportMessage>();

            var config = new ConnectionConfiguration();
            config.ParseHosts("localhost:5672");

            var selectionStrategy = new DefaultClusterHostSelectionStrategy<ConnectionFactoryInfo>();
            var connectionFactory = new ConnectionFactoryWrapper(config, selectionStrategy);
            connectionManager = new RabbitMqConnectionManager(connectionFactory, config);

            unitOfWork = new RabbitMqUnitOfWork
            {
                ConnectionManager = connectionManager,
                UsePublisherConfirms = true,
                MaxWaitTimeForConfirms = TimeSpan.FromSeconds(10)
            };

            sender = new RabbitMqMessageSender
            {
                UnitOfWork = unitOfWork,
                RoutingTopology = routingTopology
            };


            dequeueStrategy = new RabbitMqDequeueStrategy
            {
                ConnectionManager = connectionManager,
                PurgeOnStartup = true
            };

            MakeSureQueueAndExchangeExists(ReceiverQueue);


            MessagePublisher = new RabbitMqMessagePublisher
            {
                UnitOfWork = unitOfWork,
                RoutingTopology = routingTopology
            };
            subscriptionManager = new RabbitMqSubscriptionManager
            {
                ConnectionManager = connectionManager,
                EndpointQueueName = ReceiverQueue,
                RoutingTopology = routingTopology
            };

            dequeueStrategy.Init(Address.Parse(ReceiverQueue), TransactionSettings.Default, m =>
            {
                receivedMessages.Add(m);
                return true;
            }, (s, exception) => { });

            dequeueStrategy.Start(MaximumConcurrency);
        }
예제 #9
0
        public void Setup()
        {
            _rabbitMqConnectionManager = new RabbitMqConnectionManager(InitRabbitMqDocker.RabbitMqUri, nameof(RabbitMqServiceClientTests), TimeSpan.FromSeconds(20));

            _baseOptionBuilder = new RabbitMqServiceOptionsBuilder()
                                 .WithRetry(TimeSpan.FromSeconds(15), null, TimeSpan.FromSeconds(1))
                                 .WithConnectionManager(_rabbitMqConnectionManager)
                                 .WithDefaultSerializer(message => Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(message)), "application/json");
            var options = _baseOptionBuilder.Build();

            _serviceClient = new RabbitMqServiceClient(options);
            _queueName     = BaseQueueName + Guid.NewGuid();
        }
예제 #10
0
        public void SetUp()
        {
            routingTopology  = new ConventionalRoutingTopology(true);
            receivedMessages = new BlockingCollection <TransportMessage>();

            var config = new ConnectionConfiguration();

            config.ParseHosts("localhost:5672");

            var connectionFactory = new RabbitMqConnectionFactory(config);

            connectionManager = new RabbitMqConnectionManager(connectionFactory, config);

            publishChannel = connectionManager.GetPublishConnection().CreateModel();

            var channelProvider = new FakeChannelProvider(publishChannel);

            sender = new RabbitMqMessageSender(routingTopology, channelProvider, new IncomingContext(null, null));

            dequeueStrategy = new RabbitMqDequeueStrategy(connectionManager, new RepeatedFailuresOverTimeCircuitBreaker("UnitTest", TimeSpan.FromMinutes(2), e => {}),
                                                          new ReceiveOptions(s => SecondaryReceiveSettings.Enabled(CallbackQueue, 1), new MessageConverter(), 1, 1000, false, "Unit test"));


            MakeSureQueueAndExchangeExists(ReceiverQueue);


            MessagePublisher = new RabbitMqMessagePublisher
            {
                ChannelProvider = channelProvider,
                RoutingTopology = routingTopology
            };
            subscriptionManager = new RabbitMqSubscriptionManager
            {
                ConnectionManager = connectionManager,
                EndpointQueueName = ReceiverQueue,
                RoutingTopology   = routingTopology
            };

            dequeueStrategy.Init(Address.Parse(ReceiverQueue), new TransactionSettings(true, TimeSpan.FromSeconds(30), IsolationLevel.ReadCommitted, 5, false, false), m =>
            {
                receivedMessages.Add(m);
                return(true);
            }, (s, exception) => { });

            dequeueStrategy.Start(MaximumConcurrency);
        }
예제 #11
0
        public MqConnection(MqConnectionConfig config)
        {
            if ((config.RabbitMqConfig == null && config.AzureServiceBusConfig == null) ||
                (config.RabbitMqConfig != null && config.AzureServiceBusConfig != null))
            {
                throw new ArgumentException("One (only!) config must be not null");
            }

            if (config.RabbitMqConfig != null)
            {
                RabbitMqConnectionManager = new RabbitMqConnectionManager(config.RabbitMqConfig);
            }

            if (config.AzureServiceBusConfig != null)
            {
                AzureServiceBusConnectionManager = new AzureServiceBusConnectionManager(config.AzureServiceBusConfig);
            }
        }
예제 #12
0
        public void Setup()
        {
            _rabbitMqConnectionManager = new RabbitMqConnectionManager(InitRabbitMqDocker.RabbitMqUri, nameof(RabbitMqServiceClientTests), TimeSpan.FromSeconds(20));

            var options = new RabbitMqServiceOptionsBuilder()
                          .WithRetry(TimeSpan.FromSeconds(15), null, TimeSpan.FromSeconds(1))
                          .WithConnectionManager(_rabbitMqConnectionManager)
                          .WithDefaultSerializer(message => Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(message)), "application/json")
                          .Build();

            _serviceClient  = new RabbitMqServiceClient(options);
            _queueName      = BaseQueueName + Guid.NewGuid();
            _errorQueueName = _queueName + "-Error";

            _consumerOptions = new ConsumerOptionsBuilder <string>()
                               .WithSimpleMessageAck()
                               .WithDefaultDeSerializer(message => JsonConvert.DeserializeObject <string>(Encoding.UTF8.GetString(message.Span)))
                               .Build();
        }
예제 #13
0
        public void Start_WhenCalledWithoutQueueUri_RaisesException()
        {
            var dateTimeProvider     = new Mock <IDateTimeProvider>();
            var logger               = new Mock <ILogger>();
            var configurationManager = new Mock <IConfigurationManager>();

            configurationManager.Setup(x => x.Get <string>("QueueUri")).Returns((string)null);

            var connection        = new Mock <IConnection>();
            var connectionFactory = new Mock <IConnectionFactory>();

            connectionFactory.Setup(x => x.CreateConnection()).Returns(connection.Object);

            var rabbitMqConnectionManager = new RabbitMqConnectionManager(connectionFactory.Object, configurationManager.Object);

            var rabbitMqWrapper = new RabbitMqWrapper(dateTimeProvider.Object, logger.Object, configurationManager.Object, rabbitMqConnectionManager, _metrics);

            rabbitMqWrapper.Start();
        }
        static RabbitMqConnectionManager SetupRabbitMqConnectionManager(string connectionString) {
            var config = new ConnectionStringParser().Parse(connectionString);
//            config.OverrideClientProperties();
            var selectionStrategy = new DefaultClusterHostSelectionStrategy<ConnectionFactoryInfo>();
            var connectionFactory = new ConnectionFactoryWrapper(config, selectionStrategy);
            var newConnectionManager = new RabbitMqConnectionManager(connectionFactory, config);
            return newConnectionManager;
        }
 protected void SetupQueueAndSenderAndListener(string connectionString) {
     connectionManager = SetupRabbitMqConnectionManager(connectionString);
     EnsureRabbitQueueExists(QueueName);
     SetupMessageSender();
     SetupQueueListener(QueueName);
 }
 static RabbitMqConnectionManager SetupRabbitMqConnectionManager(string connectionString)
 {
     var config = new ConnectionStringParser(new SettingsHolder()).Parse(connectionString);
     //            config.OverrideClientProperties();
     var connectionFactory = new RabbitMqConnectionFactory(config);
     var newConnectionManager = new RabbitMqConnectionManager(connectionFactory, config);
     return newConnectionManager;
 }
예제 #17
0
 public void Setup()
 {
     _rabbitMqConnectionManager = new RabbitMqConnectionManager(InitRabbitMqDocker.RabbitMqUri, nameof(RabbitMqServiceClientTests), TimeSpan.FromSeconds(20));
     _queueName = BaseQueueName + Guid.NewGuid();
 }