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); }
/// <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; }
private ConnectionFactory CreateConnectionFactory(RabbitMQConnectionConfig connectionConfig) { ConnectionFactory factory = new ConnectionFactory() { HostName = connectionConfig.HostName, Port = connectionConfig.Port, UserName = connectionConfig.UserName, Password = connectionConfig.Password }; return(factory); }
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)); } }
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); }