/// <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); })); }
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 }); } }
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); }
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; }
public MassTransitService(IOptions <MassTransitSettings> massTransitSettings, IBusControl serviceBus, IServiceProvider serviceProvider) { _massTransitSettings = massTransitSettings.Value; _serviceBus = serviceBus; _serviceProvider = serviceProvider; }