我很难理解ConfigureBatchPublish
到底在做什么。
我尝试在公共交通巴士上使用这种配置:
h.ConfigureBatchPublish(cfg =>
{
cfg.Enabled = true;
cfg.MessageLimit = 100;
cfg.Timeout = TimeSpan.FromMilliseconds(100);
cfg.SizeLimit = 1024;
});
字符串
然后,我尝试使用IPublishEndpoint
和ISendEndpoint
发送/发布了几条消息,大约1000条。我一条一条地发送,不涉及Task.WhenAll
。通过描述,即:
MassTransit在将消息发送到RabbitMQ之前会短暂缓冲消息,以增加消息吞吐量。虽然建议使用默认值,但可以配置批处理选项。
我期望的是,而不是一个接一个地发布它们,大众运输将尝试等待,直到一批100个被填满,或者如果100毫秒已经过去。但我看到的是,即使应用了这个配置,消息也是一个接一个地发送的,而且,我现在为每个Send方法的调用等待100毫秒。
此外,更奇怪的是,我尝试将这些设置与ISendEndpoint
上的SendBatch
方法相结合。我将1000条记录分成100条,并决定对它们使用SendBatch
。MassTransit
现在缓存每100条记录,并在下一次SendBatch
调用时重新发送。如下所示:
- 第一批- 100条记录;
- 第二批- 200条记录(100条新记录和100条缓存记录);
- 第三批- 300条记录(100条新记录和200条缓存记录);
- 如此这般,如此坚固;
这怎么可能
1条答案
按热度按时间vdzxcuhz1#
1.如果你发送多条消息,你应该 * 不 *
await
每次调用Send
。1.你的批量发布超时 * 太高了 *。我从来没有把它设置得高于3-4毫秒。没有意义,它 * 只是 * 用于代理场景的高延迟。
1.您的大小限制 * 太低 *。它应该是默认值,除非您有特定的原因要更改它(您可能没有)。
TL;DR -你想多了。用默认设置启用它,不要等待每个调用来发送/发布。