Beispiel #1
0
        public void Constructor_Binds_RabbitMQ_Values()
        {
            var appsettings = new Dictionary <string, string>()
            {
                ["rabbitmq:client:server"]     = "localhost",
                ["rabbitmq:client:port"]       = "1234",
                ["rabbitmq:client:password"]   = "******",
                ["rabbitmq:client:username"]   = "******",
                ["rabbitmq:client:sslEnabled"] = "true"
            };

            ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();

            configurationBuilder.AddInMemoryCollection(appsettings);
            var config = configurationBuilder.Build();

            var sconfig = new RabbitMQProviderConnectorOptions(config);

            Assert.Equal("localhost", sconfig.Server);
            Assert.Equal(1234, sconfig.Port);
            Assert.Equal("password", sconfig.Password);
            Assert.Equal("username", sconfig.Username);
            Assert.Null(sconfig.Uri);
            Assert.True(sconfig.SslEnabled);
            Assert.Equal(RabbitMQProviderConnectorOptions.Default_SSLPort, sconfig.SslPort);
        }
Beispiel #2
0
        QueueConnector()
        {
            var config = SteeltoeConfigurationManager.Instance.GetConfiguration();

            Console.WriteLine($"Rabbit: {config.GetSection("VCAP_SERVICES").Value}");

            //foreach (var child in config.GetChildren())
            //{
            //    Console.WriteLine($"Path: {child.Path}; Key: {child.Key}; Value: {child.Value}");
            //}

            var options = new RabbitMQProviderConnectorOptions(config.GetSection("VCAP_SERVICES"));

            Console.WriteLine($"Host: {options.Server}");

            var factory = new ConnectionFactory
            {
                HostName = "192.168.8.36" /*options.Server*/,
                Password = "******" /*options.Password*/,
                Port     = 5672 /*options.Port*/,
                //Uri = new Uri("amqp://*****:*****@192.168.8.36:5672/cf087b17-9714-4ec0-b7f9-4ecd6aadd593"/*options.Uri*/),
                UserName    = "******" /*options.Username*/,
                VirtualHost = "cf087b17-9714-4ec0-b7f9-4ecd6aadd593" /*options.VirtualHost*/,
            };

            _connection = factory.CreateConnection(nameof(RMQApp));

            _channel = _connection.CreateModel();

            _channel.QueueDeclare(QueueName, false, false, false, null);
        }
Beispiel #3
0
        /// <summary>
        /// Adds RabbitMQ ConnectionFactory (as IConnectionFactory and ConnectionFactory) to your Autofac Container
        /// </summary>
        /// <param name="container">Your Autofac Container Builder</param>
        /// <param name="config">Application configuration</param>
        /// <param name="serviceName">Cloud Foundry service name binding</param>
        /// <returns>the RegistrationBuilder for (optional) additional configuration</returns>
        public static IRegistrationBuilder <object, SimpleActivatorData, SingleRegistrationStyle> RegisterRabbitMQConnection(this ContainerBuilder container, IConfiguration config, string serviceName = null)
        {
            if (container == null)
            {
                throw new ArgumentNullException(nameof(container));
            }

            if (config == null)
            {
                throw new ArgumentNullException(nameof(config));
            }

            Type rabbitMQInterfaceType      = RabbitMQTypeLocator.IConnectionFactory;
            Type rabbitMQImplementationType = RabbitMQTypeLocator.ConnectionFactory;

            RabbitMQServiceInfo info = serviceName == null
                ? config.GetSingletonServiceInfo <RabbitMQServiceInfo>()
                : config.GetRequiredServiceInfo <RabbitMQServiceInfo>(serviceName);

            RabbitMQProviderConnectorOptions rabbitMQConfig = new RabbitMQProviderConnectorOptions(config);
            RabbitMQProviderConnectorFactory factory        = new RabbitMQProviderConnectorFactory(info, rabbitMQConfig, rabbitMQImplementationType);

            container.Register(c => new RabbitMQHealthContributor(factory, c.ResolveOptional <ILogger <RabbitMQHealthContributor> >())).As <IHealthContributor>();

            return(container.Register(c => factory.Create(null)).As(rabbitMQInterfaceType, rabbitMQImplementationType));
        }
        public void Constructor_ThrowsIfConfigNull()
        {
            RabbitMQProviderConnectorOptions config = null;
            RabbitMQServiceInfo si = null;

            var ex = Assert.Throws <ArgumentNullException>(() => new RabbitMQProviderConnectorFactory(si, config, typeof(ConnectionFactory)));

            Assert.Contains(nameof(config), ex.Message);
        }
        public void Is_Connected_Returns_Up_Status()
        {
            var rabbitMQImplementationType = RabbitMQTypeLocator.ConnectionFactory;
            var rabbitMQConfig             = new RabbitMQProviderConnectorOptions();
            var sInfo       = new RabbitMQServiceInfo("MyId", "amqp://localhost:5672");
            var logrFactory = new LoggerFactory();
            var connFactory = new RabbitMQProviderConnectorFactory(sInfo, rabbitMQConfig, rabbitMQImplementationType);
            var h           = new RabbitMQHealthContributor(connFactory, logrFactory.CreateLogger <RabbitMQHealthContributor>());

            var status = h.Health();

            Assert.Equal(HealthStatus.UP, status.Status);
            Assert.Contains("version", status.Details.Keys);
        }
        public void Not_Connected_Returns_Down_Status()
        {
            _ = RabbitMQTypeLocator.IConnectionFactory;
            var rabbitMQImplementationType = RabbitMQTypeLocator.ConnectionFactory;
            var rabbitMQConfig             = new RabbitMQProviderConnectorOptions();
            var sInfo       = new RabbitMQServiceInfo("MyId", "amqp://*****:*****@localhost:5672/si_vhost");
            var logrFactory = new LoggerFactory();
            var connFactory = new RabbitMQProviderConnectorFactory(sInfo, rabbitMQConfig, rabbitMQImplementationType);
            var h           = new RabbitMQHealthContributor(connFactory, logrFactory.CreateLogger <RabbitMQHealthContributor>());

            var status = h.Health();

            Assert.Equal(HealthStatus.DOWN, status.Status);
            Assert.Equal("Failed to open RabbitMQ connection!", status.Description);
        }
Beispiel #7
0
        public void Create_ReturnsRabbitMQConnection()
        {
            var config = new RabbitMQProviderConnectorOptions()
            {
                Server      = "localhost",
                Port        = 5672,
                Password    = "******",
                Username    = "******",
                VirtualHost = "vhost"
            };
            var si         = new RabbitMQServiceInfo("MyId", "amqp://*****:*****@example.com:5672/si_vhost");
            var factory    = new RabbitMQProviderConnectorFactory(si, config, typeof(ConnectionFactory));
            var connection = factory.Create(null);

            Assert.NotNull(connection);
        }
        public void Is_Connected_Returns_Up_Status()
        {
            // arrange
            Type rabbitMQInterfaceType      = RabbitMQTypeLocator.IConnectionFactory;
            Type rabbitMQImplementationType = RabbitMQTypeLocator.ConnectionFactory;
            RabbitMQProviderConnectorOptions rabbitMQConfig = new RabbitMQProviderConnectorOptions();
            var sInfo       = new RabbitMQServiceInfo("MyId", "amqp://localhost:5672");
            var logrFactory = new LoggerFactory();
            var connFactory = new RabbitMQProviderConnectorFactory(sInfo, rabbitMQConfig, rabbitMQImplementationType);
            var h           = new RabbitMQHealthContributor(connFactory, logrFactory.CreateLogger <RabbitMQHealthContributor>());

            // act
            var status = h.Health();

            // assert
            Assert.Equal(HealthStatus.UP, status.Status);
        }
Beispiel #9
0
        public void UpdateConfiguration_WithNullRabbitMQServiceInfo_ReturnsInitialConfiguration()
        {
            RabbitMQProviderConfigurer       configurer = new RabbitMQProviderConfigurer();
            RabbitMQProviderConnectorOptions config     = new RabbitMQProviderConnectorOptions()
            {
                Server      = "localhost",
                Port        = 1234,
                Username    = "******",
                Password    = "******",
                VirtualHost = "vhost"
            };

            configurer.UpdateConfiguration(null, config);

            Assert.Equal("localhost", config.Server);
            Assert.Equal(1234, config.Port);
            Assert.Equal("username", config.Username);
            Assert.Equal("password", config.Password);
            Assert.Equal("vhost", config.VirtualHost);
            Assert.Null(config.Uri);
        }
Beispiel #10
0
        public void Configure_NoServiceInfo_ReturnsProvidedConnectorOptions()
        {
            RabbitMQProviderConnectorOptions config = new RabbitMQProviderConnectorOptions()
            {
                Server      = "localhost",
                Port        = 1234,
                Username    = "******",
                Password    = "******",
                VirtualHost = "vhost"
            };

            RabbitMQProviderConfigurer configurer = new RabbitMQProviderConfigurer();
            var opts = configurer.Configure(null, config);
            var uri  = new UriInfo(opts);

            Assert.False(config.SslEnabled);
            Assert.Equal("localhost", uri.Host);
            Assert.Equal(1234, uri.Port);
            Assert.Equal("username", uri.UserName);
            Assert.Equal("password", uri.Password);
            Assert.Equal("vhost", uri.Path);
        }
Beispiel #11
0
        public void UpdateConfiguration_WithRabbitMQSSLServiceInfo_UpdatesConfigurationFromServiceInfo()
        {
            RabbitMQProviderConfigurer       configurer = new RabbitMQProviderConfigurer();
            RabbitMQProviderConnectorOptions config     = new RabbitMQProviderConnectorOptions()
            {
                Server      = "localhost",
                Port        = 1234,
                Username    = "******",
                Password    = "******",
                VirtualHost = "vhost"
            };
            RabbitMQServiceInfo si = new RabbitMQServiceInfo("MyId", "amqps://*****:*****@example.com:5671/si_vhost");

            configurer.UpdateConfiguration(si, config);

            Assert.True(config.SslEnabled);
            Assert.Equal("example.com", config.Server);
            Assert.Equal(5671, config.SslPort);
            Assert.Equal("si_username", config.Username);
            Assert.Equal("si_password", config.Password);
            Assert.Equal("si_vhost", config.VirtualHost);
        }
Beispiel #12
0
        public void ToString_ReturnsValid()
        {
            var appsettings = new Dictionary <string, string>()
            {
                ["rabbit:client:server"]      = "localhost",
                ["rabbit:client:port"]        = "1234",
                ["rabbit:client:password"]    = "******",
                ["rabbit:client:username"]    = "******",
                ["rabbit:client:virtualHost"] = "foobar",
                ["rabbit:client:sslEnabled"]  = "true"
            };

            ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();

            configurationBuilder.AddInMemoryCollection(appsettings);
            var config = configurationBuilder.Build();

            var    sconfig = new RabbitMQProviderConnectorOptions(config);
            string result  = sconfig.ToString();

            Assert.Equal("amqps://*****:*****@localhost:5671/foobar", result);
        }
Beispiel #13
0
        public void Configure_SSLServiceInfoOveridesConfig_ReturnsOverriddenConnectionString()
        {
            RabbitMQProviderConnectorOptions config = new RabbitMQProviderConnectorOptions()
            {
                Server      = "localhost",
                Port        = 1234,
                Username    = "******",
                Password    = "******",
                VirtualHost = "vhost"
            };

            RabbitMQProviderConfigurer configurer = new RabbitMQProviderConfigurer();
            RabbitMQServiceInfo        si         = new RabbitMQServiceInfo("MyId", "amqps://*****:*****@example.com/si_vhost");

            var opts = configurer.Configure(si, config);
            var uri  = new UriInfo(opts);

            Assert.Equal("example.com", uri.Host);
            Assert.Equal("amqps", uri.Scheme);
            Assert.Equal("si_username", uri.UserName);
            Assert.Equal("si_password", uri.Password);
            Assert.Equal("si_vhost", uri.Path);
        }
        /// <summary>
        /// Adds RabbitMQ ConnectionFactory (as IConnectionFactory and ConnectionFactory) to your Autofac Container
        /// </summary>
        /// <param name="container">Your Autofac Container Builder</param>
        /// <param name="config">Application configuration</param>
        /// <param name="serviceName">Cloud Foundry service name binding</param>
        /// <returns>the RegistrationBuilder for (optional) additional configuration</returns>
        public static IRegistrationBuilder <object, SimpleActivatorData, SingleRegistrationStyle> RegisterRabbitMQConnection(this ContainerBuilder container, IConfiguration config, string serviceName = null)
        {
            if (container == null)
            {
                throw new ArgumentNullException(nameof(container));
            }

            if (config == null)
            {
                throw new ArgumentNullException(nameof(config));
            }

            Type rabbitMQInterfaceType      = ConnectorHelpers.FindType(rabbitMQAssemblies, rabbitMQInterfaceTypeNames);
            Type rabbitMQImplementationType = ConnectorHelpers.FindType(rabbitMQAssemblies, rabbitMQImplementationTypeNames);

            if (rabbitMQInterfaceType == null || rabbitMQImplementationType == null)
            {
                throw new ConnectorException("Unable to find ConnectionFactory, are you missing RabbitMQ assembly");
            }

            RabbitMQServiceInfo info;

            if (serviceName == null)
            {
                info = config.GetSingletonServiceInfo <RabbitMQServiceInfo>();
            }
            else
            {
                info = config.GetRequiredServiceInfo <RabbitMQServiceInfo>(serviceName);
            }

            RabbitMQProviderConnectorOptions rabbitMQConfig = new RabbitMQProviderConnectorOptions(config);
            RabbitMQProviderConnectorFactory factory        = new RabbitMQProviderConnectorFactory(info, rabbitMQConfig, rabbitMQImplementationType);

            return(container.Register(c => factory.Create(null)).As(rabbitMQInterfaceType, rabbitMQImplementationType));
        }