Exemplo n.º 1
0
        public static void RegisterHystrixMetricsStream(this ContainerBuilder container, IConfiguration config)
        {
            if (container == null)
            {
                throw new ArgumentNullException(nameof(container));
            }

            Type rabbitFactory = ConnectorHelpers.FindType(rabbitAssemblies, rabbitTypeNames);

            if (rabbitFactory == null)
            {
                throw new ConnectorException("Unable to find ConnectionFactory, are you missing RabbitMQ assembly");
            }
            container.RegisterOptions();
            container.RegisterInstance(HystrixDashboardStream.GetInstance()).SingleInstance();

            HystrixRabbitServiceInfo        info          = config.GetSingletonServiceInfo <HystrixRabbitServiceInfo>();
            HystrixProviderConnectorOptions hystrixConfig = new HystrixProviderConnectorOptions(config);
            HystrixProviderConnectorFactory factory       = new HystrixProviderConnectorFactory(info, hystrixConfig, rabbitFactory);

            container.Register(c => (HystrixConnectionFactory)factory.Create(null)).SingleInstance();

            container.Configure <HystrixMetricsStreamOptions>(config.GetSection(HYSTRIX_STREAM_PREFIX));

            container.RegisterType <HystrixMetricsStreamPublisher>().SingleInstance();
        }
        public void Constructor_BindsValues()
        {
            var appsettings = new Dictionary <string, string>()
            {
                ["hystrix:client:server"]     = "localhost",
                ["hystrix:client:port"]       = "1234",
                ["hystrix:client:password"]   = "******",
                ["hystrix:client:username"]   = "******",
                ["hystrix:client:sslEnabled"] = "true"
            };

            var configurationBuilder = new ConfigurationBuilder();

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

            var sconfig = new HystrixProviderConnectorOptions(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(HystrixProviderConnectorOptions.Default_SSLPort, sconfig.SslPort);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Add a HystrixConnectionFactory 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> RegisterHystrixConnection(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 rabbitFactory = ConnectorHelpers.FindType(rabbitAssemblies, rabbitTypeNames);

            if (rabbitFactory == null)
            {
                throw new ConnectorException("Unable to find RabbitMQ ConnectionFactory type. RabbitMQ.Client assembly may be missing");
            }

            HystrixRabbitMQServiceInfo info;

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

            HystrixProviderConnectorOptions hystrixConfig = new HystrixProviderConnectorOptions(config);
            HystrixProviderConnectorFactory factory       = new HystrixProviderConnectorFactory(info, hystrixConfig, rabbitFactory);

            return(container.Register(c => factory.Create(null)).As <HystrixConnectionFactory>());
        }
Exemplo n.º 4
0
        public void Constructor_ThrowsIfConfigNull()
        {
            HystrixProviderConnectorOptions config = null;
            HystrixRabbitMQServiceInfo      si     = null;

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

            Assert.Contains(nameof(config), ex.Message);
        }
Exemplo n.º 5
0
        public void Create_ReturnsRabbitMQConnection()
        {
            var config = new HystrixProviderConnectorOptions()
            {
                Server      = "localhost",
                Port        = 5672,
                Password    = "******",
                Username    = "******",
                VirtualHost = "vhost"
            };
            var si         = new HystrixRabbitMQServiceInfo("MyId", "amqp://*****:*****@example.com:5672/si_vhost", false);
            var factory    = new HystrixProviderConnectorFactory(si, config, typeof(ConnectionFactory));
            var connection = factory.Create(null);

            Assert.NotNull(connection);
        }
        public void UpdateConfiguration_WithNullHystrixRabbitMQServiceInfo_ReturnsInitialConfiguration()
        {
            var configurer = new HystrixProviderConfigurer();
            var config     = new HystrixProviderConnectorOptions()
            {
                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);
        }
Exemplo n.º 7
0
        /// <summary>
        /// Add a HystrixConnectionFactory 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> RegisterHystrixConnection(this ContainerBuilder container, IConfiguration config, string serviceName = null)
        {
            if (container == null)
            {
                throw new ArgumentNullException(nameof(container));
            }

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

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

            Type rabbitFactory = RabbitMQTypeLocator.ConnectionFactory;
            var  hystrixConfig = new HystrixProviderConnectorOptions(config);
            var  factory       = new HystrixProviderConnectorFactory(info, hystrixConfig, rabbitFactory);

            return(container.Register(c => factory.Create(null)).As <HystrixConnectionFactory>());
        }
        public void Configure_NoServiceInfo_ReturnsProvidedConnectorOptions()
        {
            var config = new HystrixProviderConnectorOptions()
            {
                Server      = "localhost",
                Port        = 1234,
                Username    = "******",
                Password    = "******",
                VirtualHost = "vhost"
            };

            var configurer = new HystrixProviderConfigurer();
            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);
        }
        public void UpdateConfiguration_WithHystrixRabbitMQSSLServiceInfo_UpdatesConfigurationFromServiceInfo()
        {
            var configurer = new HystrixProviderConfigurer();
            var config     = new HystrixProviderConnectorOptions()
            {
                Server      = "localhost",
                Port        = 1234,
                Username    = "******",
                Password    = "******",
                VirtualHost = "vhost"
            };
            var si = new HystrixRabbitMQServiceInfo("MyId", "amqps://*****:*****@example.com:5671/si_vhost", false);

            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);
        }
        public void ToString_ReturnsValid()
        {
            var appsettings = new Dictionary <string, string>()
            {
                ["hystrix:client:server"]      = "localhost",
                ["hystrix:client:port"]        = "1234",
                ["hystrix:client:password"]    = "******",
                ["hystrix:client:username"]    = "******",
                ["hystrix:client:virtualHost"] = "foobar",
                ["hystrix:client:sslEnabled"]  = "true"
            };

            var configurationBuilder = new ConfigurationBuilder();

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

            var sconfig = new HystrixProviderConnectorOptions(config);
            var result  = sconfig.ToString();

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

            var configurer = new HystrixProviderConfigurer();
            var si         = new HystrixRabbitMQServiceInfo("MyId", "amqps://*****:*****@example.com/si_vhost", false);

            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);
        }