コード例 #1
0
 private static IBusControl SetupRabbitMq(IConfiguration configuration)
 {
     return(RabbitMQConfiguration.ConfigureBus(
                rabbitMQHostUri: configuration.GetValue <string>("RabbitMQ:HostUri"),
                rabbitMQUsername: configuration.GetValue <string>("RabbitMQ:Username"),
                rabbitMQPassword: configuration.GetValue <string>("RabbitMQ:Password")));
 }
コード例 #2
0
        public SiteStartup(IConfiguration configuration, IHostingEnvironment env)
        {
            var builder = new ConfigurationBuilder()
                          .SetBasePath(env.ContentRootPath)
                          .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
                          .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true)
                          .AddEnvironmentVariables();

            Configuration = builder.Build();


            RoutingConfiguration = new RoutingConfig();
            Configuration.Bind("RoutingConfig", RoutingConfiguration);
            //set all URLS to point to web api -- doesn't need to be separate here even if configuration allows it
            RoutingConfiguration.CustomerService.URL         = RoutingConfiguration.URL;
            RoutingConfiguration.OrderService.URL            = RoutingConfiguration.URL;
            RoutingConfiguration.ProductService.URL          = RoutingConfiguration.URL;
            RoutingConfiguration.ShoppingCartService.URL     = RoutingConfiguration.URL;
            RoutingConfiguration.PurchasedProductService.URL = RoutingConfiguration.URL;

            DbConfig = new DatabaseConfiguration();
            Configuration.Bind("DatabaseConfiguration", DbConfig);

            RabbitConfig = new RabbitMQConfiguration();
            Configuration.Bind("RabbitMQConfiguration", RabbitConfig);
        }
コード例 #3
0
ファイル: SignalRController.cs プロジェクト: Arukim/hangman
 public SignalRCounter(
     IBusControl busControl,
     IOptions <RabbitMQConfiguration> rmqOptions)
 {
     this.busControl = busControl;
     rmqConfig       = rmqOptions.Value;
 }
コード例 #4
0
        public static LoggerConfiguration GetLoggerConfiguration()
        {
            // Read Logging configuration
            var configuration = new ConfigurationBuilder()
                                .AddJsonFile("appsettings.json", optional: false)
                                .AddUserSecrets <Startup>()
                                .Build();
            var logCfg = configuration.GetSection("Logging");

            var application          = logCfg["Application"];
            var environment          = logCfg["Environment"];
            var rabbitMQHost         = logCfg["RabbitMQHost"];
            var rabbitMQVHost        = logCfg["RabbitMQVHost"];
            var rabbitPortIsSet      = int.TryParse(logCfg["RabbitMQPort"], out var rabbitMQPort);
            var rabbitMQUsername     = logCfg["RabbitMQUsername"];
            var rabbitMQPassword     = logCfg["RabbitMQPassword"];
            var rabbitMQExchangeName = logCfg["RabbitMQExchangeName"];
            var rabbitMQExchangeType = logCfg["RabbitMQExchangeType"];
            var serilogFilePath      = logCfg["SerilogFilePath"] ?? logCfg["LogFilePath"];

            Enum.TryParse(logCfg["SerilogMinLevel"], out LogEventLevel serilogMinLevel);
            bool.TryParse(logCfg["UseRabbit"], out var useRabbit);
            bool.TryParse(logCfg["UseFile"], out var useFile);

            var serilogFormatter     = new NiceSerilogFormatter(environment, application);
            var serilogConfiguration = new LoggerConfiguration()
                                       .Enrich.FromLogContext()
                                       .WriteTo.Console()
                                       .MinimumLevel.Is(serilogMinLevel);

            if (useRabbit && !string.IsNullOrEmpty(rabbitMQHost) && rabbitPortIsSet)
            {
                var rabbitCfg = new RabbitMQConfiguration
                {
                    Hostname     = rabbitMQHost,
                    VHost        = rabbitMQVHost,
                    Port         = rabbitMQPort,
                    Username     = rabbitMQUsername ?? "",
                    Password     = rabbitMQPassword ?? "",
                    Protocol     = RabbitMQ.Client.Protocols.AMQP_0_9_1,
                    Exchange     = rabbitMQExchangeName,
                    ExchangeType = rabbitMQExchangeType
                };

                // Write logs to RabbitMQ / Kibana
                serilogConfiguration.WriteTo.RabbitMQ(rabbitCfg, serilogFormatter);
            }

            // Write logs to file
            if (useFile)
            {
                serilogConfiguration.WriteTo.RollingFile(serilogFormatter,
                                                         serilogFilePath,
                                                         fileSizeLimitBytes: 5000000,
                                                         retainedFileCountLimit: 5,
                                                         flushToDiskInterval: TimeSpan.FromSeconds(20));
            }

            return(serilogConfiguration);
        }
        /// <summary>
        /// Adds a sink that lets you push log messages to RabbitMq
        /// </summary>
        public static LoggerConfiguration RabbitMQ(
            this LoggerSinkConfiguration loggerConfiguration,
            RabbitMQConfiguration rabbitMqConfiguration,
            ITextFormatter formatter,
            IFormatProvider formatProvider = null)
        {
            if (loggerConfiguration == null)
            {
                throw new ArgumentNullException("loggerConfiguration");
            }
            if (rabbitMqConfiguration == null)
            {
                throw new ArgumentNullException("rabbitMqConfiguration");
            }

            // calls overloaded extension method
            return(loggerConfiguration.RabbitMQ(
                       rabbitMqConfiguration.Hostname,
                       rabbitMqConfiguration.Username,
                       rabbitMqConfiguration.Password,
                       rabbitMqConfiguration.Exchange,
                       rabbitMqConfiguration.ExchangeType,
                       rabbitMqConfiguration.Queue,
                       rabbitMqConfiguration.DeliveryMode,
                       rabbitMqConfiguration.RouteKey,
                       rabbitMqConfiguration.Port,
                       rabbitMqConfiguration.VHost,
                       rabbitMqConfiguration.Heartbeat,
                       rabbitMqConfiguration.Protocol,
                       rabbitMqConfiguration.BatchPostingLimit,
                       rabbitMqConfiguration.Period,
                       formatter,
                       formatProvider));
        }
コード例 #6
0
        public static void Main(string[] args)
        {
            var config = new RabbitMQConfiguration
            {
                Hostname     = "localhost",
                Username     = "******",
                Password     = "******",
                Exchange     = "app-logging",
                ExchangeType = "direct",
                DeliveryMode = RabbitMQDeliveryMode.NonDurable,
                RouteKey     = "Logs",
                Port         = 5672
            };

            Log.Logger = new LoggerConfiguration()
                         .WriteTo.RabbitMQ(config, new JsonFormatter())
                         .Enrich.WithProperty("App Name", "WebApp")
                         .MinimumLevel.Verbose()
                         .CreateLogger();

            try
            {
                CreateWebHostBuilder(args).Build().Run();
            }
            catch (Exception ex)
            {
                Log.Fatal(ex, "Host terminated unexpectedly");
            }
            finally
            {
                Log.CloseAndFlush();
            }
        }
コード例 #7
0
 public HomeController(ILogger <HomeController> logger, IBusControl busControl,
                       IOptions <RabbitMQConfiguration> rmqOptions)
 {
     this.logger     = logger;
     this.busControl = busControl;
     rmqConfig       = rmqOptions.Value;
 }
コード例 #8
0
        public RabbitMQSubscription(
            IModel channel,
            RabbitMQChannelEventsHandler channelEvents,
            Action <byte[], IMessageContext> handler,
            RabbitMQConfiguration configuration,
            RabbitMQMessaging messaging,
            ILoggerFactory loggerFactory,
            params string[] queues)
        {
            this.channel = channel ??
                           throw new ArgumentNullException(nameof(channel));

            this.channelEvents = channelEvents ??
                                 throw new ArgumentNullException(nameof(channelEvents));

            this.handler = handler ??
                           throw new ArgumentNullException(nameof(handler));

            this.configuration = configuration ??
                                 throw new ArgumentNullException(nameof(configuration));

            this.messaging = messaging ??
                             throw new ArgumentNullException(nameof(messaging));

            this.queues = queues ??
                          throw new ArgumentNullException(nameof(queues));

            logger = loggerFactory?.CreateLogger <RabbitMQSubscription>() ??
                     throw new ArgumentNullException(nameof(loggerFactory));

            consumersToQueues = new Dictionary <string, string>();
        }
コード例 #9
0
        public GameStateMachine(ILogger <GameStateMachine> logger, IOptions <RabbitMQConfiguration> rmqOptions)
        {
            this.logger = logger;
            rmqConfig   = rmqOptions.Value;

            BuildStateMachine();
        }
コード例 #10
0
        public RabbitMQContext(ILogger <RabbitMQContext> logger, IOptions <RabbitMQConfiguration> configuration)
        {
            _logger        = logger;
            _configuration = configuration.Value;

            try
            {
                var factory = new ConnectionFactory
                {
                    HostName                 = _configuration.HostName,
                    UserName                 = _configuration.Username,
                    Password                 = _configuration.Secret,
                    VirtualHost              = _configuration.VirtualHost,
                    DispatchConsumersAsync   = _configuration.DispatcherAsync,
                    TopologyRecoveryEnabled  = _configuration.TopologyRecovery,
                    AutomaticRecoveryEnabled = _configuration.AutomaticRecovery,
                    NetworkRecoveryInterval  = TimeSpan.FromSeconds(_configuration.NetworkRecoverySeconds)
                };
                _connection = factory.CreateConnection();
            }
            catch (Exception)
            {
                throw;
            }
        }
コード例 #11
0
        public void TwoQueues_SingleRetry_Success()
        {
            var configuration = new RabbitMQConfiguration();

            configuration.AddTopology <MultipleQueuesWithRetryTopologyFactory>(
                "mytopic", "q1", "q2", 4000);

            var exchanges = configuration.Topologies["mytopic"].Exchanges;
            var exchange  = exchanges.First();

            Assert.Equal("mytopic", exchange.Name);
            Assert.Equal(2, exchange.Queues.Count);

            Assert.Equal("q1-wait-0", GetSingleQueueDlxName(exchanges, "mytopic", "q1"));
            Assert.Equal("q1-retry-0", GetSingleQueueDlxName(exchanges, "q1-wait-0"));
            Assert.Equal("q1-dead", GetSingleQueueDlxName(exchanges, "q1-retry-0"));

            Assert.Equal(4000, GetSingleQueueTtl(exchanges, "q1-wait-0"));

            Assert.Equal("q2-wait-0", GetSingleQueueDlxName(exchanges, "mytopic", "q2"));
            Assert.Equal("q2-retry-0", GetSingleQueueDlxName(exchanges, "q2-wait-0"));
            Assert.Equal("q2-dead", GetSingleQueueDlxName(exchanges, "q2-retry-0"));

            Assert.Equal(4000, GetSingleQueueTtl(exchanges, "q2-wait-0"));
        }
コード例 #12
0
        public void ThreeQueues_ThreeRetries_Success()
        {
            var configuration = new RabbitMQConfiguration();

            configuration.AddTopology <MultipleQueuesWithRetryTopologyFactory>(
                "mytopic", "q1", "q2", "q3", 4000, 8000, 16000);

            var exchanges = configuration.Topologies["mytopic"].Exchanges;
            var exchange  = exchanges.First();

            Assert.Equal("mytopic", exchange.Name);
            Assert.Equal(3, exchange.Queues.Count);

            for (int i = 1; i < 4; i++)
            {
                Assert.Equal($"q{i}-wait-0", GetSingleQueueDlxName(exchanges, "mytopic", $"q{i}"));
                Assert.Equal($"q{i}-retry-0", GetSingleQueueDlxName(exchanges, $"q{i}-wait-0"));
                Assert.Equal($"q{i}-wait-1", GetSingleQueueDlxName(exchanges, $"q{i}-retry-0"));
                Assert.Equal($"q{i}-retry-1", GetSingleQueueDlxName(exchanges, $"q{i}-wait-1"));
                Assert.Equal($"q{i}-wait-2", GetSingleQueueDlxName(exchanges, $"q{i}-retry-1"));
                Assert.Equal($"q{i}-retry-2", GetSingleQueueDlxName(exchanges, $"q{i}-wait-2"));
                Assert.Equal($"q{i}-dead", GetSingleQueueDlxName(exchanges, $"q{i}-retry-2"));

                Assert.Equal(4000, GetSingleQueueTtl(exchanges, $"q{i}-wait-0"));
                Assert.Equal(8000, GetSingleQueueTtl(exchanges, $"q{i}-wait-1"));
                Assert.Equal(16000, GetSingleQueueTtl(exchanges, $"q{i}-wait-2"));
            }
        }
コード例 #13
0
        /// <summary>
        /// Add topology created by a specific <see cref="ITopologyFactory"/> implementation.
        /// </summary>
        /// <typeparam name="TTopologyFactory">An <see cref="ITopologyFactory"/> implementation.</typeparam>
        /// <param name="rabbitMQconfiguration">The <see cref="RabbitMQConfiguration"/> object.</param>
        /// <param name="mainExchangeName">The exchange name.</param>
        /// <param name="args">
        ///     Custom topology args (see the specific <see cref="ITopologyFactory"/>
        ///     implementation for details).</param>
        /// <returns>The provided <see cref="RabbitMQConfiguration"/> object.</returns>
        public static RabbitMQConfiguration AddTopology <TTopologyFactory>(this RabbitMQConfiguration rabbitMQconfiguration,
                                                                           string mainExchangeName, params object[] args)
            where TTopologyFactory : ITopologyFactory, new()
        {
            if (rabbitMQconfiguration is null)
            {
                throw new ArgumentNullException(nameof(rabbitMQconfiguration));
            }

            if (mainExchangeName is null)
            {
                throw new ArgumentNullException(nameof(mainExchangeName));
            }

            var topologyFactory = new TTopologyFactory();

            if (rabbitMQconfiguration.Topologies is null)
            {
                rabbitMQconfiguration.Topologies = new Dictionary <string, Topology>();
            }

            rabbitMQconfiguration.Topologies.Add(mainExchangeName, topologyFactory.Create(mainExchangeName, args));

            return(rabbitMQconfiguration);
        }
コード例 #14
0
 public RabbitMqPublisher(ILogWriter logWriter,
                          IRabbitMqConnection connection,
                          RabbitMQConfiguration rabbitConfig)
 {
     _logWriter    = logWriter;
     _connection   = connection;
     _rabbitConfig = rabbitConfig;
 }
コード例 #15
0
ファイル: HangmanController.cs プロジェクト: Arukim/hangman
 public HangmanController(IDbContext dbContext,
                          IBusControl busControl,
                          IOptions <RabbitMQConfiguration> rmqOptions)
 {
     this.dbContext  = dbContext;
     this.busControl = busControl;
     rmqConfig       = rmqOptions.Value;
 }
コード例 #16
0
        public RabbitMQService(IConfiguration configuration,
                               ILogger <RabbitMQService> logger)
        {
            var RabbitMQConfiguration = configuration.GetSection("RabbitMQConfiguration").Get <RabbitMQConfiguration>();

            this.RabbitMQConfiguration = RabbitMQConfiguration;
            this.logger = logger;
        }
コード例 #17
0
        public ConfigureSitecore(ISitecoreConfiguration configuration, ILogger <ConfigureSitecore> logger)
        {
            _configuration = configuration;
            _logger        = logger;

            _rabbitMqConfiguration = new RabbitMQConfiguration();
            _configuration.GetSection(_sectionName).Bind(_rabbitMqConfiguration);
        }
コード例 #18
0
ファイル: ProcessTurnConsumer.cs プロジェクト: Arukim/hangman
 public ProcessTurnConsumer(ILogger <ProcessTurnConsumer> logger,
                            IOptions <RabbitMQConfiguration> rmqOption,
                            IDbContext dbContext)
 {
     rmqConfig      = rmqOption.Value;
     this.dbContext = dbContext;
     this.logger    = logger;
 }
コード例 #19
0
 public SelectWordConsumer(ILogger <SelectWordConsumer> logger,
                           IOptions <RabbitMQConfiguration> rmqOption,
                           WordGenerator wordGenerator)
 {
     rmqConfig          = rmqOption.Value;
     this.logger        = logger;
     this.wordGenerator = wordGenerator;
 }
コード例 #20
0
 public RabbitMQSink(RabbitMQConfiguration configuration,
                     ITextFormatter formatter,
                     IFormatProvider formatProvider) : base(configuration.BatchPostingLimit, configuration.Period)
 {
     _formatter      = formatter ?? new RawFormatter();
     _formatProvider = formatProvider;
     _client         = new RabbitMQClient(configuration);
 }
コード例 #21
0
        /// <summary>
        /// Constructor for RabbitMqClient
        /// </summary>
        /// <param name="configuration">mandatory</param>
        public RabbitMQClient(RabbitMQConfiguration configuration)
        {
            // load configuration
            _config = configuration;

            // initialize
            InitializeEndpoint();
        }
コード例 #22
0
        public OpenStreetMapApi(string baseUrl, RabbitMQConfiguration rabbitMQConfiguration)
        {
            this.baseUrl = baseUrl ?? throw new ArgumentNullException(nameof(baseUrl));
            client       = new HttpClient();
            client.DefaultRequestHeaders.Add("User-Agent", "Services demo");

            rabbitMQInteractor      = new RabbitMQInteractor(rabbitMQConfiguration);
            addressResultDtoFactory = new AddressResultDtoFactory();
        }
コード例 #23
0
 public EventBusRabbitMQ(IOptions<RabbitMQConfiguration> rabbitMQOptions)
 {
     // using IOptions to inject
     _rabbitMQConfig = rabbitMQOptions.Value;
     _hostName = _rabbitMQConfig.HostName;
     _password = _rabbitMQConfig.Password;
     _queueName = _rabbitMQConfig.QueueName;
     _userName = _rabbitMQConfig.UserName;
 }
コード例 #24
0
        /// <summary>
        /// Constructor for RabbitMqClient
        /// </summary>
        /// <param name="configuration">mandatory</param>
        public RabbitMQClient(RabbitMQConfiguration configuration)
        {
            // load configuration
            _config             = configuration;
            _publicationAddress = new PublicationAddress(_config.ExchangeType, _config.Exchange, _config.RouteKey);

            // initialize
            InitializeEndpoint();
        }
コード例 #25
0
        public static IServiceCollection AddRabbitMQConnection(this IServiceCollection services, IConfiguration configuration)
        {
            var connectionConfig = new RabbitMQConfiguration();

            configuration.Bind("rabbitmq_connection", connectionConfig);

            return(services
                   .AddSingleton <IMessageBrokerConfiguration, RabbitMQConfiguration>(provider => connectionConfig));
        }
コード例 #26
0
ファイル: OrchestratorService.cs プロジェクト: Arukim/hangman
 public OrchestratorService(ILogger <OrchestratorService> logger,
                            IOptions <MongoDBConfiguration> mongoDbOptions,
                            IOptions <RabbitMQConfiguration> rabbitMqOptions,
                            GameStateMachine stateMachine)
 {
     mongoDbConfig     = mongoDbOptions.Value;
     rabbitMqConfig    = rabbitMqOptions.Value;
     this.logger       = logger;
     this.stateMachine = stateMachine;
 }
コード例 #27
0
        public RabbitMQMessagingService(ISitecoreConfiguration configuration, ILogger <RabbitMQMessagingService> logger, IModel channel, IMessageProcessor messageProcessor)
        {
            _logger           = logger;
            _channel          = channel;
            _configuration    = configuration;
            _messageProcessor = messageProcessor;

            _rabbitMqConfiguration = new RabbitMQConfiguration();
            _configuration.GetSection(_sectionName).Bind(_rabbitMqConfiguration);
        }
        public static IServiceCollection RabbitMQConfiguration(this IServiceCollection services, IConfiguration Configuration)
        {
            var rabbitConfiguration = new RabbitMQConfiguration();

            Configuration.GetSection("RabbitMQConfiguration").Bind(rabbitConfiguration);

            services.AddSingleton(rabbitConfiguration);

            return(services);
        }
コード例 #29
0
 public RabbitMQSink(
     RabbitMQConfiguration configuration,
     ITextFormatter formatter,
     IFormatProvider formatProvider
     )
 {
     // prepare client
     _client         = new RabbitMQClient(configuration);
     _formatProvider = formatProvider;
     _formatter      = formatter ?? new RawFormatter();
 }
コード例 #30
0
        public void NoRetry_Success()
        {
            var rabbitMQConfiguration = new RabbitMQConfiguration();

            rabbitMQConfiguration.AddTopology <SimpleQueueWithRetryTopologyFactory>(
                "mytopic");

            var exchanges = rabbitMQConfiguration.Topologies["mytopic"].Exchanges;

            Assert.Equal("mytopic-dead", GetSingleQueueDlxName(exchanges, "mytopic"));
        }
コード例 #31
0
        public void DefaultToOneThousand()
        {
            var configuration = new RabbitMQConfiguration();

             Assert.That(configuration.ListenTimeout, Is.EqualTo(1000));
        }
コード例 #32
0
        public void ShouldReturnValueFromSetter()
        {
            var configuration = new RabbitMQConfiguration { ListenTimeout = 123 };

             Assert.That(configuration.ListenTimeout, Is.EqualTo(123));
        }