public Task <CommandResponseMessage> SendCommandAsync(CommandRequestMessage request, string queueName) { CheckDisposed(); if (queueName == _replyQueueName) { _logger.LogWarning( "The queuename {0} has the same same as the reply queue name, this should not happen", _replyQueueName); throw new ArgumentException($"The queuename {queueName} is the same as the reply queue name"); } var props = Channel.CreateBasicProperties(); props.CorrelationId = Guid.NewGuid().ToString(); props.ReplyTo = _replyQueueName; props.Timestamp = new AmqpTimestamp(DateTime.Now.Ticks); props.Type = request.CommandType; var messageBytes = request.EncodeMessage(); var tcs = new TaskCompletionSource <CommandResponseMessage>(); _callbackMapper.TryAdd(props.CorrelationId, tcs); _logger.LogTrace("Sending command message with correlation id {id} and body {body} ", props.CorrelationId, request); Channel.BasicPublish("", queueName, false, props, messageBytes); Channel.BasicConsume(_replyQueueName, true, "", false, false, null, _consumer); return(tcs.Task); }
public Task<CommandResponseMessage> SendCommandAsync(CommandRequestMessage request, string queueName) { CheckDisposed(); if (queueName == _replyQueueName) { _logger.LogWarning("The queuename {0} has the same same as the reply queue name, this should not happen", _replyQueueName); throw new ArgumentException($"The queuename {queueName} is the same as the reply queue name"); } IBasicProperties props = Channel.CreateBasicProperties(); props.CorrelationId = Guid.NewGuid().ToString(); props.ReplyTo = _replyQueueName; props.Timestamp = new AmqpTimestamp(DateTime.Now.Ticks); var messageBytes = request.EncodeMessage(); var tcs = new TaskCompletionSource<CommandResponseMessage>(); _callbackMapper.TryAdd(props.CorrelationId, tcs); _logger.LogTrace("Sending command message with correlation id {id} and body {body} ", props.CorrelationId, request); Channel.BasicPublish(exchange: "", routingKey: queueName, mandatory: false, basicProperties: props, body: messageBytes); Channel.BasicConsume(queue: _replyQueueName, autoAck: true, consumerTag: "", noLocal: false, exclusive: false, arguments: null, consumer: _consumer); return tcs.Task; }