internal static void AddMassTransit(this IServiceCollection services, RabbitMqConnectionSettings _settings)
        {
            var bus = Bus.Factory.CreateUsingRabbitMq(cfg =>
            {
                var rabbitHost = _settings.Rabbitmq;
                var rabbitUser = _settings.UserName;
                var rabbitPass = _settings.Password;

                cfg.Host(new Uri($"rabbitmq://{rabbitHost}/"), h =>
                {
                    h.Username(rabbitUser);
                    h.Password(rabbitPass);
                });

                cfg.ReceiveEndpoint("Masstransit.students", e =>
                {
                    e.Consumer <StudentConsumer>();
                });
            });

            services.AddSingleton <IPublishEndpoint>(bus);
            services.AddSingleton <ISendEndpointProvider>(bus);
            services.AddSingleton <IBus>(bus);
            services.AddSingleton <IBusControl>(bus);

            services.AddScoped <IPublisher, Publisher>();
            services.AddSingleton <IBusDepot, BusDepot>();
            services.AddMassTransitHostedService();
        }
 public BaseBroker(IOptions <RabbitMqConnectionSettings> connectionSettingsSnapshot)
 {
     this._connectionSettings = connectionSettingsSnapshot.Value;
     this._connectionFactory  = new ConnectionFactory
     {
         UserName    = this._connectionSettings.Username,
         Password    = this._connectionSettings.Password,
         VirtualHost = this._connectionSettings.VirtualHost,
         HostName    = this._connectionSettings.HostName,
         Uri         = new Uri(this._connectionSettings.Uri)
     };
 }
예제 #3
0
        internal static void AddRabbitMq(this IServiceCollection services, RabbitMqConnectionSettings _settings)
        {
            services.AddSingleton <RabbitMqConnectionSettings>(_settings);
            services.Configure <RabbitMqConnectionSettings>(option =>
            {
                option.Rabbitmq = _settings.Rabbitmq;
                option.Password = _settings.Password;
                option.UserName = _settings.UserName;
            });

            services.AddTransient <IRabbitMqClient, RabbitMqClient>();
            services.AddTransient <IStudentAudit, StudentAudit>();
        }
        private static RabbitMqQueueSettings CheckByRegExp(RabbitMqConnectionSettings connectionSettings, string queueName)
        {
            var queueNames = connectionSettings.Queues.Keys.ToList();

            foreach (var queue in queueNames)
            {
                if (Regex.IsMatch(queueName, queue))
                {
                    return(connectionSettings.Queues[queue]);
                }
            }

            return(null);
        }
        private static RabbitMqQueueSettings TryGetQueueSettings(RabbitMqConnectionSettings connectionSettings, RabbitMqQueue queue)
        {
            if (connectionSettings.Queues != null)
            {
                connectionSettings.Queues.TryGetValue(queue.Name, out var queueSettings);

                if (queueSettings == null)
                {
                    queueSettings = CheckByRegExp(connectionSettings, queue.Name);
                }

                return(queueSettings);
            }

            return(null);
        }
        private async Task ProcessConnectionAsync(RabbitMqConnectionSettings connectionSettings)
        {
            try
            {
                var queues = await _rabbitMqManagementService.GetQueuesAsync(connectionSettings.Url, connectionSettings.Username, connectionSettings.Password);

                foreach (var queue in queues)
                {
                    ProcessQueue(connectionSettings, queue);
                }
            }
            catch (Exception ex)
            {
                _log.WriteError(nameof(Execute), connectionSettings.Url, ex);
            }
        }
        private void ProcessQueue(RabbitMqConnectionSettings connectionSettings, RabbitMqQueue queue)
        {
            var queueSettings    = TryGetQueueSettings(connectionSettings, queue);
            var maxMessagesCount = queueSettings?.MaxMessagesCount ??
                                   connectionSettings.MaxMessagesCount ??
                                   _maxMessagesCount;

            if (queue.Messages >= maxMessagesCount)
            {
                var title = connectionSettings.Title ?? new Uri(connectionSettings.Url).Host;

                _log.WriteMonitor(
                    title,
                    string.Empty,
                    $"Queue '{queue.Name}' contains {queue.Messages} messages");
            }
        }
예제 #8
0
        private void SetupRabbitMq(RabbitMqConnectionSettings settings)
        {
            _connectionFactory = new ConnectionFactory
            {
                HostName = settings.Rabbitmq,
                UserName = settings.UserName,
                Password = settings.Password
            };

            if (string.IsNullOrEmpty(VirtualHost) == false)
            {
                _connectionFactory.VirtualHost = VirtualHost;
            }
            if (Port > 0)
            {
                _connectionFactory.Port = Port;
            }

            _connection = _connectionFactory.CreateConnection();
            _channel    = _connection.CreateModel();
        }
예제 #9
0
 public RabbitMqClient(RabbitMqConnectionSettings rabbitMqConnectionSettings, IAuditRepository auditRepository)
 {
     _rabbitMqConnectionSettings = rabbitMqConnectionSettings;
     SetupRabbitMq(_rabbitMqConnectionSettings);
     _auditRepository = auditRepository;
 }
예제 #10
0
 public Startup(IConfiguration configuration)
 {
     _configuration              = configuration;
     _connectionStrings          = _configuration.GetSection(SettingsCommonNodeNames.ConnectionStringsConfiguration).Get <ConnectionStringsConfiguration>();
     _rabbitMqConnectionSettings = _configuration.GetSection(SettingsCommonNodeNames.RabbitMqConnectionSettings).Get <RabbitMqConnectionSettings>();
 }