gpt4 book ai didi

c# - 是否可以使用 async/await 将消息发布到 RabbitMQ?

转载 作者:太空狗 更新时间:2023-10-29 23:49:07 25 4
gpt4 key购买 nike

我似乎找不到任何有关如何异步向 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;
}

最佳答案

RabbitMQ .NET客户端目前只支持异步消费。

如果您只想遵守契约(Contract),您可以返回一个 Task.CompletedTask,就像您所做的那样。

如果您想开始一些工作并稍后观察它,您可以通过调用 Task.Run 来包装该代码,或者只是放置一个 await Task.Yield() 您想从同步中断到异步的位置。

关于c# - 是否可以使用 async/await 将消息发布到 RabbitMQ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53438438/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com