是否可以使用 async/await 向 RabbitMQ 发布消息?
Posted
技术标签:
【中文标题】是否可以使用 async/await 向 RabbitMQ 发布消息?【英文标题】:Is it possible to use async/await for Publishing a message to RabbitMQ? 【发布时间】:2019-04-25 13:54:02 【问题描述】:我似乎找不到任何关于如何异步向 RabbitMQ 发布消息的信息。
I stumble across 的示例通常是关于使用 async/await 来检索/使用 来自 RabbitMQ 的消息。
var consumer = new AsyncEventingBasicConsumer(model);
consumer.Received += async (o, a) =>
Console.WriteLine("Message Get" + a.DeliveryTag);
await Task.Yield();
;
是否有一些示例或示例代码?
编辑
这是我一直在尝试使用的一些示例代码:
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;
【问题讨论】:
【参考方案1】:目前状态下,RabbitMQ .NET 客户端只支持异步消费。
如果您只想遵守合同,可以像以前一样返回Task.CompletedTask
。
如果您想开始一些工作并稍后观察它,您可以通过调用 Task.Run
来包装该代码,或者只需将 await Task.Yield()
放在您想要从同步中断为异步的位置。
【讨论】:
以上是关于是否可以使用 async/await 向 RabbitMQ 发布消息?的主要内容,如果未能解决你的问题,请参考以下文章
是否可以在没有 async/await 的情况下从 Promise 返回已解析的值?