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