/// <summary> /// Конфигурация фабрики подключений. /// </summary> /// <param name="connectionFactory"> Фабрика подключений. </param> /// <param name="config"> Конфигурация. </param> public static void Configure(this ConnectionFactory connectionFactory, QueuesConfig config) { connectionFactory.UserName = config.UserName; connectionFactory.Password = config.Password; connectionFactory.VirtualHost = config.VirtualHost; connectionFactory.HostName = config.HostName; connectionFactory.Port = config.Port; connectionFactory.RequestedHeartbeat = TimeSpan.FromSeconds(30); connectionFactory.AutomaticRecoveryEnabled = true; }
/// <summary> /// Сконфигурировать модель. /// </summary> /// <param name="model"> Модель данных. </param> /// <param name="config"> Конфигурация. </param> public static void Configure(this IModel model, QueuesConfig config) { if (config.PrefetchCount.HasValue) { model.BasicQos(0, config.PrefetchCount.Value, false); } else { model.BasicQos(0, 1, false); } }
/// <summary> /// Конфигурация фабрики подключений. /// </summary> /// <param name="connectionFactory"> Фабрика подключений. </param> /// <param name="config"> Конфигурация. </param> public static void Configure(this ConnectionFactory connectionFactory, QueuesConfig config) { connectionFactory.UserName = config.UserName; connectionFactory.Password = config.Password; connectionFactory.VirtualHost = config.VirtualHost; connectionFactory.Protocol = Protocols.DefaultProtocol; connectionFactory.HostName = config.HostName; connectionFactory.Port = config.Port; connectionFactory.RequestedHeartbeat = 30; connectionFactory.AutomaticRecoveryEnabled = true; }
/// <summary> /// Клиент RabbitMq. /// </summary> /// <param name="configuration"> Конфигурация клиента. </param> /// <param name="dispatcher"> Диспетчер сообщений. </param> /// <param name="logger"> Логгер. </param> /// <param name="serializer"> Сериализатор сообщений. </param> public RabbitClientBase(QueuesConfig configuration, IMsgDispatcher dispatcher, ILogger <IMessageQueueClient> logger, IMessageSerializer serializer) { Configuration = configuration ?? throw new ArgumentNullException($"Конфигурация клиента очереди не найдена или содержит ошибки"); Dispatcher = dispatcher ?? throw new ArgumentNullException(nameof(dispatcher)); Logger = logger ?? throw new ArgumentException(nameof(logger)); Serializer = serializer ?? throw new ArgumentNullException(nameof(serializer)); DeliveryCount = new Dictionary <ulong, int>(); RegistratedConsumers = new Dictionary <string, EventingBasicConsumer>(); ConnectionFactory = new ConnectionFactory { RequestedHeartbeat = 5, }; }
/// <summary> /// Подготовить модели поведения. /// </summary> /// <param name="configuration">Конфигурация очереди.</param> private void PrepareBehaviours(QueuesConfig configuration) { BehavioursDict = new Dictionary <MessageProcessPhase, List <IMessageProcessBehaviuor> >(); // Разобрать модели поведения если они имеются if (configuration.BehaviourConfigurations != null && configuration.BehaviourConfigurations.Any()) { foreach (var bc in configuration.BehaviourConfigurations) { try { var behaviour = JsonConvert.DeserializeObject <BehaviourBase>( bc.Configuration, new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Auto, }); List <IMessageProcessBehaviuor> behaviours; if (!BehavioursDict.TryGetValue(behaviour.ProcessPhase, out behaviours)) { behaviours = new List <IMessageProcessBehaviuor>(); BehavioursDict.Add(behaviour.ProcessPhase, behaviours); } behaviour.SetClient(this); behaviours.Add(behaviour); } catch (Exception ex) { var msg = $"Ошибка во время разбора модели поведения клиента [{bc.Configuration}]"; Logger.LogError(ex, msg); throw new Exception(msg, ex); } } } }
/// <summary> /// Сконфигурировать модель. /// </summary> /// <param name="model"> Модель данных. </param> /// <param name="config"> Конфигурация. </param> public static void Configure(this IModel model, QueuesConfig config) { model.BasicQos(0, 1, false); }