'Is it possible to use async/await for Publishing a message to RabbitMQ?
I can't seem to find any information about how to async'ly Publish a message to RabbitMQ.
The examples I stumble across are usually about using async/await to retrieve/consume a message from RabbitMQ.
var consumer = new AsyncEventingBasicConsumer(model);
consumer.Received += async (o, a) =>
{
Console.WriteLine("Message Get" + a.DeliveryTag);
await Task.Yield();
};
Are there some examples or example code for this?
Edit
Here's some sample code I've been trying to play with:
public Task AddMessageAsync(string content,
TimeSpan? timeToLive,
TimeSpan? initialVisibilityDelay,
CancellationToken cancellationToken)
{
_logger.LogDebug("Starting to add a Message to queue. {content}", content);
CheckRabbitMQPolicy(_logger).Execute(() =>
{
using (var connection = _factory.CreateConnection())
{
_logger.LogDebug("Created a connection to factory.");
using (var channel = connection.CreateModel())
{
_logger.LogDebug("Created a channel");
AddMessageToRabbitMQPolicy(_logger).Execute(() =>
{
_logger.LogDebug("Check or Create a queue '{queueName}'", _queueName);
channel.QueueDeclare(queue: _queueName,
durable: false, // Could be TRUE
exclusive: false,
autoDelete: false,
arguments: null);
_logger.LogDebug("'{queueName}' exists or was created.", _queueName);
var body = Encoding.UTF8.GetBytes(content);
_logger.LogDebug("About to publish message to queue '{queueName}'", _queueName);
//var foo = new AsyncEventingBasicPublish()
channel.BasicPublish(exchange: "",
routingKey: _queueName,
basicProperties: null,
body: body);
_logger.LogDebug("Message published to queue '{queueName}'", _queueName);
});
}
}
});
return Task.CompletedTask;
}
Solution 1:[1]
At the current state, the RabbitMQ .NET client only supports asynchronous consumption.
If you only want to comply with a contract, you can return a Task.CompletedTask, like you did.
If you want to start some work and observe it later, you can wrap that code with a call to Task.Run or just put a await Task.Yield() where you want to break from synchronous to asynchronous.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Paulo Morgado |
