Пример #1
0
        public bool SendMessage <T>(RabbitMQConnectionConfig connectionConfig, RabbitMQQueueConfig queue, RabbitMQExchangeConfig exchange, string routingKey, T body)
        {
            this.ValidateRules(connectionConfig, queue, exchange);

            if (body == null)
            {
                throw new ArgumentNullException(nameof(body));
            }

            ConnectionFactory factory = this.CreateConnectionFactory(connectionConfig);

            using (IConnection connection = factory.CreateConnection())
                using (IModel channel = connection.CreateModel())
                {
                    // Criar exchange
                    channel.ExchangeDeclare(exchange.Name, exchange.Type, exchange.Durable, exchange.AutoDelete);

                    // Criar fila...
                    channel.QueueDeclare(queue.Name, queue.Durable, queue.Exclusive, queue.AutoDelete);

                    // Bind da fila com a exchange/routingkey
                    channel.QueueBind(queue.Name, exchange.Name, routingKey, null);

                    IBasicProperties basicProperties = channel.CreateBasicProperties();
                    basicProperties.Persistent = true;

                    string json    = Newtonsoft.Json.JsonConvert.SerializeObject(body);
                    byte[] payload = Encoding.UTF8.GetBytes(json);

                    // Send
                    channel.BasicPublish(exchange.Name, routingKey, basicProperties, payload);
                }

            return(true);
        }
Пример #2
0
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="options"></param>
        /// <param name="logger"></param>
        public RabbitMQListener(
            IOptions <RabbitMQConnectionConfig> options,
            ILogger <RabbitMQListener> logger)
        {
            RabbitMQConnectionConfig connectionOption = options.Value;

            try
            {
                var factory = new ConnectionFactory
                {
                    HostName = connectionOption.HostName,
                    Port     = connectionOption.Port,
                    UserName = connectionOption.UserName,
                    Password = connectionOption.Password
                };

                _connection = factory.CreateConnection();
                _channel    = _connection.CreateModel();
            }
            catch (Exception ex)
            {
                logger.LogError(-1, ex, "RabbitMQ client connection fail");
            }

            _logger = logger;
        }
Пример #3
0
        private ConnectionFactory CreateConnectionFactory(RabbitMQConnectionConfig connectionConfig)
        {
            ConnectionFactory factory = new ConnectionFactory()
            {
                HostName = connectionConfig.HostName,
                Port     = connectionConfig.Port,
                UserName = connectionConfig.UserName,
                Password = connectionConfig.Password
            };

            return(factory);
        }
Пример #4
0
        private void ValidateRules(RabbitMQConnectionConfig connectionConfig, RabbitMQQueueConfig queue, RabbitMQExchangeConfig exchange)
        {
            if (connectionConfig == null)
            {
                throw new ArgumentNullException(nameof(connectionConfig));
            }

            if (queue == null)
            {
                throw new ArgumentNullException(nameof(queue));
            }

            if (exchange == null)
            {
                throw new ArgumentNullException(nameof(exchange));
            }
        }
Пример #5
0
        public QueueStatusDto GetQueueStatus(RabbitMQConnectionConfig connectionConfig, RabbitMQQueueConfig queue, RabbitMQExchangeConfig exchange, string routingKey)
        {
            this.ValidateRules(connectionConfig, queue, exchange);

            QueueStatusDto result;

            ConnectionFactory factory = this.CreateConnectionFactory(connectionConfig);

            using (IConnection connection = factory.CreateConnection())
                using (IModel channel = connection.CreateModel())
                {
                    QueueDeclareOk queueDeclare = channel.QueueDeclarePassive(queue.Name);
                    result = new QueueStatusDto(queueDeclare.QueueName, (int)queueDeclare.MessageCount, (int)queueDeclare.ConsumerCount);
                }

            return(result);
        }