示例#1
0
        public void SubscribeToQueue(InterserviceQueueTypeEnum queueType)
        {
            _logger.Information($"Subscribing to queue with type '{queueType}'...");

            if (_channelModel == null)
            {
                var connection = _rabbitConnectionService.GetConnection();
                _channelModel = connection.CreateModel();
            }

            var consumer = new EventingBasicConsumer(_channelModel);

            consumer.Received += async(model, eventArgs) =>
            {
                try
                {
                    await ProcessReceivedMessageAsync(model, eventArgs);
                }
                catch (Exception exception)
                {
                    _logger.Write(exception);
                }
            };

            var queueDeclareResult = _channelModel.QueueDeclare(queueType);

            _channelModel.BasicConsume(queueDeclareResult.QueueName, true, consumer);

            _logger.Information($"Successfully subscribed to queue with type '{queueType}'");
        }
示例#2
0
        /// <summary>
        /// Инициализировать очередь сообщений
        /// </summary>
        public static QueueDeclareOk QueueDeclare(this IModel channelModel, InterserviceQueueTypeEnum queueType)
        {
            var queueName          = Enum.GetName(typeof(InterserviceQueueTypeEnum), queueType);
            var queueDeclareResult = channelModel.QueueDeclare(queueName, false, false, false, null);

            return(queueDeclareResult);
        }
示例#3
0
        public void PublishMessage(InterserviceQueueTypeEnum queueType, IInterserviceMessageModel messageModel)
        {
            _logger.Information($"Publishing interservice message to queue with type = '{queueType}'...");
            _logger.Debug($"Interservice message = '{messageModel.ToJson()}'");

            var connection = _rabbitConnectionService.GetConnection();

            using var channelModel = connection.CreateModel();

            var queueDeclareResult = channelModel.QueueDeclare(queueType);

            var messageJson  = messageModel.ToJson();
            var messageBytes = Encoding.UTF8.GetBytes(messageJson);

            channelModel.BasicPublish("", queueDeclareResult.QueueName, null, messageBytes);

            _logger.Information($"Interservice message was successfully published to queue with type = '{queueType}'");
        }
        /// <summary>
        /// Подписаться на очередь сообщений RabbitMQ
        /// </summary>
        public static IApplicationBuilder SubscribeToRabbitQueue(this IApplicationBuilder app, InterserviceQueueTypeEnum queueType)
        {
            var rabbitConsumptionService = app.ApplicationServices.GetService <IRabbitConsumptionService>();

            rabbitConsumptionService.SubscribeToQueue(queueType);

            return(app);
        }