我有一种情况,我应该通过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();
}
字符串
所以我使用了TaskUtil.Await和/或Wait(),但是发布性能很差(每秒33条消息),而纯Rabbit客户端的结果要好得多(每秒至少200条消息),并且考虑到消息排序:
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)));
}
}
型
MassTransit在同步上下文中是否存在任何性能问题,或者我是否应该在代码中使用任何调整?
1条答案
按热度按时间t1rydlwq1#
如果你产生了一批消息,按顺序,你不应该等待每个发布,这将是非常缓慢的。考虑将任务添加到列表中,并同时等待它们:
字符串
如果您使用的是RabbitMQ,您可以通过
ConfigureBatchPublish
方法调整批处理发布者设置(MassTransit在后台使用,以便在发送时将消息分组在一起,以减少往返开销),如下所示:型