MassTransit ConfigureBatchPublish - 发送重复批次a

问题描述 投票:0回答:1

我无法理解 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 条缓存记录);
  • 依此类推;

这有什么意义?

弄清楚这实际上是如何工作的对我来说会很有帮助。 谢谢!

c# .net rabbitmq .net-6.0 masstransit
1个回答
0
投票
  1. 如果您要发送多条消息,则不应 await
     每次致电 
    Send
  2. 您的批量发布超时
  3. 太高。我从未将其设置高于 3-4 毫秒。没有意义,它适用于代理场景的高延迟。
  4. 您的尺寸限制
  5. 太低。它应该是默认值,除非您有特定原因更改它(您可能没有)。
TL;DR - 你想太多了。使用默认设置启用它,无需等待每次调用来发送/发布。

© www.soinside.com 2019 - 2024. All rights reserved.