我正在使用 https://masstransit.io/ 库,发送 2000 条消息平均使用 100% CPU 15 分钟。
首先,我认为这是由于消息请求的作业造成的,但后来我尝试在没有任何作业的情况下发送 2000 条消息,得到了相同的结果。
这正常吗? MassTransit 如何消耗 CPU ?
消息是通过调用以下方法的 Azure 函数发送的:
public async Task DoJob(string contextName, RequestDto request)
{
using var provider = _publishEndpointProvider.Build();
var publishEndpoint = provider.Get();
foreach (var reference in references)
{
await publishEndpoint.Publish(new ProcessMessage
{
MessageCorrelationId = Guid.NewGuid().ToString(),
MessageCreationTimestamp = DateTimeOffset.UtcNow,
ContextName = contextName,
StartDate = request.StartDate,
EndDate = request.EndDate,
Reference = reference
}).ConfigureAwait(false);
}
}
非常感谢, AK
不要等待每个调用在循环中发布,您基本上是在等待代理确认消息。这是大量的停滞时间,除了等待经纪人之外什么也不做。
不知道你的
Build
功能背后是什么,但我知道它不会很好。其实我真的知道这样不会好。事实上这可能很可怕。我建议使用 sample 作为如何在 Azure Functions 中使用 MassTransit 发布消息的指南。
祝你好运!