Pur*_*ome 6 .net c# rabbitmq async-await
我似乎找不到任何有关如何异步向RabbitMQ发布消息的信息。
我偶然发现的示例通常是关于使用async / await 从 RabbitMQ 检索/使用消息。
var consumer = new AsyncEventingBasicConsumer(model);
consumer.Received += async (o, a) =>
{
Console.WriteLine("Message Get" + a.DeliveryTag);
await Task.Yield();
};
Run Code Online (Sandbox Code Playgroud)
是否有一些示例或示例代码?
这是我一直尝试使用的一些示例代码:
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;
}
Run Code Online (Sandbox Code Playgroud)
目前,RabbitMQ .NET 客户端仅支持异步消费。
如果您只想遵守合同,您可以Task.CompletedTask像您一样返回 。
如果您想开始一些工作并稍后观察它,您可以通过调用来包装该代码,或者只是将您想要从同步中断到异步的位置Task.Run放置。await Task.Yield()
| 归档时间: |
|
| 查看次数: |
1358 次 |
| 最近记录: |