Example #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="massTransitSettings"></param>
        /// <param name="action"></param>
        /// <returns></returns>
        public IBusControl ConfigureBus(MassTransitSettings massTransitSettings,
                                        Action <IRabbitMqBusFactoryConfigurator> action = null)
        {
            return(Bus.Factory.CreateUsingRabbitMq(cfg =>
            {
                cfg.Host(new Uri(massTransitSettings.Uri), hst =>
                {
                    hst.Username(massTransitSettings.UserName);
                    hst.Password(massTransitSettings.Password);
                });

                if (massTransitSettings.MessageRetryCount.HasValue)
                {
                    cfg.UseMessageRetry(u => u.Immediate(massTransitSettings.MessageRetryCount.Value));
                }

                if (massTransitSettings.TripThreshold.HasValue && massTransitSettings.ActiveThreshold.HasValue && massTransitSettings.ResetInterval.HasValue)
                {
                    cfg.UseCircuitBreaker(cb =>
                    {
                        cb.TrackingPeriod = TimeSpan.FromMinutes(massTransitSettings.TrackingPeriod.Value); //TrackingPeriod ise ResetInterval süresinden sonra belirlediğimiz süre daha tetikte beklemesi söylüyor.Tekrar hata alınması durumunda ActiveThreshold ve TripThreshold limitlerini beklemeden yine resetinterval'da belirlenen süre ile beklemeye geçecektir.
                        cb.TripThreshold = massTransitSettings.TripThreshold.Value;                         // Alınan taleplerimizin belirlediğimiz % oranında hata olması durumunda restart olmasını sağlar.
                        cb.ActiveThreshold = massTransitSettings.ActiveThreshold.Value;                     // Üst üste belirlediğimiz miktarda hata aldığımızda restart olmasını sağlar
                    });
                }

                if (massTransitSettings.RateLimit.HasValue && massTransitSettings.RateLimiterInterval.HasValue)
                {
                    cfg.UseRateLimit(massTransitSettings.RateLimit.Value, TimeSpan.FromSeconds(massTransitSettings.RateLimiterInterval.Value)); // servise belirlediğimiz süre içerisinde belirlenen request adeti kadar istek yapabilecek şekilde yapıyorum.
                }

                action?.Invoke(cfg);
            }));
        }
Example #2
0
        public ManagementApiService(IOptions <MassTransitSettings> settings)
        {
            _settings = settings.Value;

            var provider = new HareDuConfigProvider();

            _config = provider.Configure(c =>
            {
                c.Broker(b =>
                {
                    b.ConnectTo(_settings.ManagementEndpoint);
                    b.UsingCredentials(_settings.UserName, _settings.Password);
                    b.TimeoutAfter(TimeSpan.FromSeconds(5));
                });
                c.Diagnostics(y =>
                {
                    y.Probes(z =>
                    {
                        z.SetMessageRedeliveryThresholdCoefficient(0.60M);
                        z.SetSocketUsageThresholdCoefficient(0.60M);
                        z.SetConsumerUtilizationThreshold(0.65M);
                        z.SetQueueHighFlowThreshold(90);
                        z.SetQueueLowFlowThreshold(10);
                        z.SetRuntimeProcessUsageThresholdCoefficient(0.65M);
                        z.SetFileDescriptorUsageThresholdCoefficient(0.65M);
                        z.SetHighConnectionClosureRateThreshold(90);
                        z.SetHighConnectionCreationRateThreshold(60);
                    });
                });
            });
        }
 public RabbitErrorQueuesMonitor(IErrorPipelineService errorPipelineService, IOptions <MassTransitSettings> settings, IManagementApiService managementApiService)
 {
     _errorPipelineService = errorPipelineService;
     _managementApiService = managementApiService;
     _settings             = settings.Value;
     _channels             = new Dictionary <string, IModel>();
 }
 private static void SetRetryCount(MassTransitSettings massTransitSettings, IRabbitMqBusFactoryConfigurator cfg)
 {
     if (massTransitSettings.MessageRetryCount.HasValue)
     {
         cfg.UseMessageRetry(u => u.Immediate(massTransitSettings.MessageRetryCount.Value));
     }
 }
 private static void SetRateLimit(MassTransitSettings massTransitSettings, IRabbitMqBusFactoryConfigurator cfg)
 {
     if (massTransitSettings.RateLimit.HasValue && massTransitSettings.RateLimiterInterval.HasValue)
     {
         cfg.UseRateLimit(massTransitSettings.RateLimit.Value, TimeSpan.FromSeconds(massTransitSettings.RateLimiterInterval.Value)); // servise belirlediğimiz süre içerisinde belirlenen request adeti kadar istek yapabilecek şekilde yapıyorum.
     }
 }
 /// <summary>
 /// ctor
 /// </summary>
 /// <param name="massTransitSettings"></param>
 /// <param name="serviceProvider"></param>
 public RabbitMQListener(MassTransitSettings massTransitSettings,
                         IServiceProvider serviceProvider)
 {
     _massTransitSettings = massTransitSettings;
     _serviceProvider     = serviceProvider;
     _bus = BusConfigurator.Instance.ConfigureBus(_massTransitSettings);
 }
        public CreateOrderCommandHandler(OrderDbContext dbContext,
                                         IMapping mapping,
                                         MassTransitSettings massTransitSettings)
        {
            _dbContext           = dbContext;
            _mapping             = mapping;
            _massTransitSettings = massTransitSettings;

            var busInstance = BusConfigurator.Instance.ConfigureBus(_massTransitSettings);

            _sendEndpoint = busInstance.GetSendEndpoint(new Uri($"{_massTransitSettings.Uri}/{BaseConstants.SAGAQUEUENAME}")).Result;
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="services"></param>
        /// <param name="configuration"></param>
        /// <returns></returns>
        public static IServiceCollection AddCore(this IServiceCollection services, IConfiguration configuration)
        {
            services.AddSingleton <IMapping, MapsterMapping>();

            var massTransitSettings = new MassTransitSettings();

            configuration.GetSection(nameof(MassTransitSettings)).Bind(massTransitSettings);
            services.Configure <MassTransitSettings>(configuration.GetSection(nameof(MassTransitSettings)));
            services.AddSingleton(massTransitSettings);

            return(services);
        }
 private static void SetTripThreshold(MassTransitSettings massTransitSettings, IRabbitMqBusFactoryConfigurator cfg)
 {
     if (massTransitSettings.TripThreshold.HasValue && massTransitSettings.ActiveThreshold.HasValue && massTransitSettings.ResetInterval.HasValue)
     {
         cfg.UseCircuitBreaker(cb =>
         {
             cb.TrackingPeriod  = TimeSpan.FromMinutes(massTransitSettings.TrackingPeriod.Value); //TrackingPeriod ise ResetInterval süresinden sonra belirlediğimiz süre daha tetikte beklemesi söylüyor.Tekrar hata alınması durumunda ActiveThreshold ve TripThreshold limitlerini beklemeden yine resetinterval'da belirlenen süre ile beklemeye geçecektir.
             cb.TripThreshold   = massTransitSettings.TripThreshold.Value;                        // Alınan taleplerimizin belirlediğimiz % oranında hata olması durumunda restart olmasını sağlar.
             cb.ActiveThreshold = massTransitSettings.ActiveThreshold.Value;                      // Üst üste belirlediğimiz miktarda hata aldığımızda restart olmasını sağlar
         });
     }
 }
Example #10
0
        public RabbitMessageOutgoingService(ILogger <RabbitMessageOutgoingService> logger, IOptions <MassTransitSettings> settings)
        {
            _logger = logger;

            _settings = settings.Value;
            var factory = new ConnectionFactory {
                UserName    = _settings.UserName,
                Password    = _settings.Password,
                HostName    = _settings.HostName,
                VirtualHost = _settings.VirtualHost
            };

            _conn = factory.CreateConnection();

            _channel = _conn.CreateModel();
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="massTransitSettings"></param>
        /// <param name="action"></param>
        /// <returns></returns>
        public IBusControl ConfigureBus(MassTransitSettings massTransitSettings,
                                        Action <IRabbitMqBusFactoryConfigurator> action = null)
        {
            return(Bus.Factory.CreateUsingRabbitMq(cfg =>
            {
                cfg.Host(new Uri(massTransitSettings.Uri), hst =>
                {
                    hst.Username(massTransitSettings.UserName);
                    hst.Password(massTransitSettings.Password);
                });

                SetRetryCount(massTransitSettings, cfg);
                SetTripThreshold(massTransitSettings, cfg);
                SetRateLimit(massTransitSettings, cfg);

                action?.Invoke(cfg);
            }));
        }
        public static IServiceCollection AddCore(this IServiceCollection services, IConfiguration configuration)
        {
            services.AddScoped(typeof(IPipelineBehavior <,>), typeof(ValidationPipelines <,>));

            services.AddHealthChecks();

            services.AddScoped(typeof(IAggregateRepository <>), typeof(AggregateRepository <>));

            var massTransitSettings = new MassTransitSettings();

            configuration.GetSection(nameof(MassTransitSettings)).Bind(massTransitSettings);
            services.Configure <MassTransitSettings>(configuration.GetSection(nameof(MassTransitSettings)));
            services.AddSingleton(massTransitSettings);

            services.AddScoped <IEventListener, RabbitMQListener>();

            return(services);
        }
Example #13
0
        public static MassTransitSettings MassTransitSettings(this NameValueCollection settings)
        {
            var mtSettings = new MassTransitSettings();

            if (!string.IsNullOrEmpty(settings["MassTransit:ConnectionString"]))
            {
                mtSettings.ConnectionString = settings["MassTransit:ConnectionString"];
            }

            if (!string.IsNullOrEmpty(settings["MassTransit:PrefetchCount"]))
            {
                mtSettings.PrefetchCount = Convert.ToUInt16(settings["MassTransit:PrefetchCount"]);
            }

            if (!string.IsNullOrEmpty(settings["MassTransit:ConcurrencyLimit"]))
            {
                mtSettings.ConcurrencyLimit = Convert.ToInt32(settings["MassTransit:ConcurrencyLimit"]);
            }

            return(mtSettings);
        }
        public IBusControl ConfigureBus(MassTransitSettings massTransitSettings,
                                        Action <IRabbitMqBusFactoryConfigurator> registrationAction = null)
        {
            return(Bus.Factory.CreateUsingRabbitMq(cfg =>
            {
                cfg.Host(new Uri(massTransitSettings.MassTransitUri), hst =>
                {
                    hst.Username(massTransitSettings.UserName);
                    hst.Password(massTransitSettings.Password);
                });

                //cfg.PublishTopology.BrokerTopologyOptions = PublishBrokerTopologyOptions.MaintainHierarchy;

                if (massTransitSettings.MessageRetryCount != null)
                {
                    cfg.UseMessageRetry(r => r.Immediate(massTransitSettings.MessageRetryCount.Value)); // Retry pattern!!.İlgili işlemi yapmak için belirlenen kadar deneyecektir. Hata devam ederise mesajı error queue’a atıp bir sonrakine devam edecektir.
                }

                if (massTransitSettings.TripThreshold != null && massTransitSettings.ActiveThreshold != null && massTransitSettings.ResetInterval != null)
                {
                    cfg.UseCircuitBreaker(cb =>
                    {
                        cb.TrackingPeriod = TimeSpan.FromMinutes(massTransitSettings.TrackingPeriod.Value); //TrackingPeriod ise ResetInterval süresinden sonra belirlediğimiz süre daha tetikte beklemesi söylüyor.Tekrar hata alınması durumunda ActiveThreshold ve TripThreshold limitlerini beklemeden yine resetinterval'da belirlenen süre ile beklemeye geçecektir.
                        cb.TripThreshold = massTransitSettings.TripThreshold.Value;                         // Alınan taleplerimizin belirlediğimiz % oranında hata olması durumunda restart olmasını sağlar.
                        cb.ActiveThreshold = massTransitSettings.ActiveThreshold.Value;                     // Üst üste belirlediğimiz miktarda hata aldığımızda restart olmasını sağlar
                        cb.ResetInterval = TimeSpan.FromMinutes(massTransitSettings.ResetInterval.Value);   // Hata oluşması durumlarında sistemin belirlediğimiz sürede beklemesi gerektiğini belirtiyoruz.
                    });
                }

                if (massTransitSettings.RateLimit != null && massTransitSettings.RateLimiterInterval != null)
                {
                    cfg.UseRateLimit(massTransitSettings.RateLimit.Value, TimeSpan.FromSeconds(massTransitSettings.RateLimiterInterval.Value)); // servise belirlediğimiz süre içerisinde belirlenen request adeti kadar istek yapabilecek şekilde yapıyorum.
                }

                registrationAction.Invoke(cfg);
            }));
        }
 /// <summary>
 /// ctor
 /// </summary>
 /// <param name="massTransitSettings"></param>
 /// <param name="serviceProvider"></param>
 public MassTransitEventBus(MassTransitSettings massTransitSettings, IServiceProvider serviceProvider)
 {
     _massTransitSettings = massTransitSettings;
     _bus             = BusConfigurator.Instance.ConfigureBus(_massTransitSettings);
     _serviceProvider = serviceProvider;
 }
Example #16
0
 public MassTransitService(IOptions <MassTransitSettings> massTransitSettings, IBusControl serviceBus, IServiceProvider serviceProvider)
 {
     _massTransitSettings = massTransitSettings.Value;
     _serviceBus          = serviceBus;
     _serviceProvider     = serviceProvider;
 }