我有一个需要发送到rabbitMq的消息列表。我正在使用公共交通,我会像这样一一发布消息;
foreach (var @event in events)
{
await _bus.Publish(@event, ....);
}
但是这种方法的吞吐量非常低,所以我想尝试批量发布这样的东西;
var tasks = new List<Task>();
foreach (var @event in events)
{
var t = _bus.Publish(@event, ....);
tasks.Add(t);
}
await Task.WnenAll(tasks);
//and with this configuration;
hostConfigurator.ConfigureBatchPublish(x =>
{
x.SizeLimit = 256 * 1024;
x.Enabled = true;
x.Timeout = TimeSpan.FromMilliseconds(4);
x.MessageLimit = 100;
});
我的问题是:采用这种批量发布方法,消息发送到RabbitMQ的顺序是否仍会保持与第一种方法一样?
我尝试一条一条地发布消息,但吞吐量很低。
它们应该按顺序交付给经纪人,是的。您还可以使用
PublishBatch
扩展方法而不是自己循环。