我遇到一种情况,我应该通过 RabbitMQ 同步发布消息(旧代码),否则消息将乱序,因为 MassTransit 在不同的线程中发布
public void PostUserQuantitySync(int userId, decimal amount)
{
foreach (var item in Enumerable.Range(0, 1000))
{
var _ = _publishEndpoint.Publish(new CreateUserTransactionRequest() { Amount = item });
}
return Ok();
}
Run Code Online (Sandbox Code Playgroud)
因此,我使用了 TaskUtil.Await 和/或 Wait(),但发布性能非常差(每秒 33/s 消息),而纯兔子客户端的结果要好得多(至少每秒 200/s 消息)并且尊重消息订购:
public void PostUserQuantitySync(int userId, decimal amount)
{
foreach (var item in Enumerable.Range(0, 1000))
{
TaskUtil.Await(() _publishEndpoint.Publish(new CreateUserTransactionRequest() { Amount = item }, c => c.SetAwaitAck(false)));
}
}
Run Code Online (Sandbox Code Playgroud)
MassTransit 在同步上下文中是否存在任何性能问题,或者我应该在代码中使用任何调整吗?