我无法理解 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 调用时重新发送它。经历了这样的事情:
这有什么意义?
弄清楚这实际上是如何工作的对我来说会很有帮助。 谢谢!
await
每次致电
Send
。