public RabbitMQEventBus(DATConfiguration configuration, EventbusConfiguration options, IMetricsClient client) : base(client) { _configuration = configuration; int port = 5672; if (options.Port != null) { port = options.Port.Value; } string virtualHost = "/"; if (options.VirtualHost != null) { virtualHost = options.VirtualHost; } _connectionFactory = new ConnectionFactory { UserName = options.Username, Password = options.Password, VirtualHost = virtualHost, HostName = options.Hostname, Port = port }; _connection = _connectionFactory.CreateConnection(); _channel = _connection.CreateModel(); }
private static void BootstrapLogger(ContainerBuilder builder, DATConfiguration configuration) { if (configuration.Logging == null) { return; } ILoggerFactory factory = new LoggerFactory() .AddConsole(configuration.Logging.LogLevel) .AddDebug(configuration.Logging.LogLevel); builder.Register((context, parameters) => factory.CreateLogger <DATContext>()).As <ILogger>(); }
/// <summary> /// Initialize a new DAT context. This will try to use the appsettings.json in the local directory. If this file /// is not found it will fall back to a default configuration. /// </summary> /// <typeparam name="T">Type of the configuration file, must inherit from Configuration.Configuration</typeparam> public static void Bootstrap <T>(bool debugMode = false) where T : Configuration.Configuration { DebugMode = debugMode; ContainerBuilder containerBuilder = new ContainerBuilder(); DATConfiguration configuration = BootstrapConfiguration <T>(containerBuilder); BootstrapMetrics(containerBuilder, configuration); BootstrapLogger(containerBuilder, configuration); BootstrapEventbus(containerBuilder, configuration); OnPreContainerBuild(containerBuilder); Container = containerBuilder.Build(); }
public void BootstrapDefaultTest() { bool eventHandlerCalled = false; DATContext.PreContainerBuild += (sender, builder) => { eventHandlerCalled = true; }; DATContext.Bootstrap(); DATConfiguration datConfiguration = DATContext.Container.Resolve <DATConfiguration>(); Assert.Equal("test-service", datConfiguration.Name); ILogger logger = DATContext.Container.Resolve <ILogger>(); Assert.NotNull(logger); Assert.True(eventHandlerCalled); }
private static void BootstrapEventbus(ContainerBuilder builder, DATConfiguration configuration) { if (configuration.EventBus == null) { return; } switch (configuration.EventBus.Type) { case "rabbitmq": builder.Register(c => new RabbitMQEventBus(configuration, configuration.EventBus, c.Resolve <IMetricsClient>())) .As <IEventBus>() .SingleInstance(); break; } }
public void BootstrapDefaultStagingTest() { Environment.SetEnvironmentVariable("NETCORE_ENVIRONMENT", "Staging"); bool eventHandlerCalled = false; DATContext.PreContainerBuild += (sender, builder) => { eventHandlerCalled = true; }; DATContext.Bootstrap(); DATConfiguration datConfiguration = DATContext.Container.Resolve <DATConfiguration>(); Assert.Equal("test-service-2", datConfiguration.Name); ILogger logger = DATContext.Container.Resolve <ILogger>(); Assert.NotNull(logger); Assert.True(eventHandlerCalled); }
private static DATConfiguration BootstrapConfiguration <T>(ContainerBuilder containerBuilder) where T : Configuration.Configuration { // Default location is appsettings.json in the local directory IConfigurationBuilder builder = new ConfigurationBuilder() .AddJsonFile("appsettings.json", true); string environment = Environment.GetEnvironmentVariable("NETCORE_ENVIRONMENT"); PrintDebug($"environment set to [{environment}]"); if (environment != null) { string fileName = $"appsettings.{environment.ToLower()}.json"; builder.AddJsonFile(fileName, true); PrintDebug($"loaded [{fileName}]"); } // Local is last since it is the most specific configuration file builder.AddJsonFile("appsettings.local.json", true); // Environment variables should always override configuration values. This usefull for example passwords builder.AddEnvironmentVariables(); IConfiguration config = builder.Build(); // If there are no childeren configuration load failed, so we manually load the default. T fullConfig = config.Get <T>(); DATConfiguration configuration = config.GetSection("DAT").Get <DATConfiguration>() ?? new DATConfiguration(); containerBuilder.RegisterInstance(configuration).As <DATConfiguration>(); containerBuilder.RegisterInstance(fullConfig).As <T>(); PrintDebug("Outputting Effective Config:"); PrintDebug(JsonConvert.SerializeObject(fullConfig)); return(configuration); }
private static void BootstrapMetrics(ContainerBuilder containerBuilder, DATConfiguration configuration) { if (configuration.Metrics == null) { MockMetricsClient client = new MockMetricsClient(); containerBuilder.RegisterInstance(client).As <IMetricsClient>(); } else { switch (configuration.Metrics.Type) { case "statsd": containerBuilder.Register(c => new StatsDMetricsClient(configuration.Metrics)) .As <IMetricsClient>() .SingleInstance(); break; default: throw new Exception($"Invalid metrics type: {configuration.Metrics.Type}"); } } }
public RabbitMQEventBus(DATConfiguration configuration, IMetricsClient client) : this(configuration, new EventbusConfiguration() { Hostname = "localhost", Username = "******", Password = "******", VirtualHost = "/", Port = 5672 }, client) { }