通过.NET Core Logger向服务总线队列发送消息?

时间:2019-08-07 11:10:05

标签: asynchronous logging .net-core azure-servicebus-queues

我创建了一个自定义记录器,该记录器将消息发送到服务总线队列。我的问题是Microsoft.Extensions.Logging.ILogger没有异步Log方法,因此必须同步调用异步方法,这可能会导致问题。

    _queueClient.SendAsync(message).Wait();

所以我的问题是,在不引起线程饥饿的情况下,最安全的方法是什么?

1 个答案:

答案 0 :(得分:1)

Net Core日志记录专门设计为不使用异步方法。他们认为日志记录应该足够快,不需要它。

  

”日志记录应如此之快,以至于不值得   异步代码。”

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/logging/?view=aspnetcore-2.2

建议,如果需要记录这样的内容,请改用“批处理记录器”。

  

”相反,将日志消息同步添加到内存队列中并具有   后台工作人员将消息从队列中拉出以执行   将数据推送到SQL Server的异步工作。”

因此,基本上,您应该将队列调用移至后台工作程序(HostedService)中,并使其在后台工作程序中进行异步调用。常规的“记录器”方法应调用将消息放入MemoryCache队列的内容或类似内容,然后后台工作人员将在后台从那里获取内容。我敢肯定,Azure Logger的例子很简单