gpt4 book ai didi

rabbitmq - 为什么 MassTransit 只在一个线程上消费消息

转载 作者:行者123 更新时间:2023-12-01 13:41:15 24 4
gpt4 key购买 nike

我在常规控制台应用程序中有以下简单代码,并希望(部分)命令并行使用。我认为 UseConcurrencyLimit 会设置并发线程数。我所看到的是 RabbitMQ 确实有 10 条未确认的消息,但消费者连续使用它们,每个 console.writeline 之间有一秒钟的暂停。我一定是遗漏了一些明显的东西,但我不明白。

public static class EventHandler
{
public static void Run()
{
var personQueueName = "RabbitMqPoc.Person";

var busControl = Bus.Factory.CreateUsingRabbitMq(cfg =>
{

cfg.UseConcurrencyLimit(10);

var host = cfg.Host(new Uri("rabbitmq://localhost"), h =>
{
h.Username("guest");
h.Password("guest");
});

cfg.ReceiveEndpoint(host, personQueueName, e =>
{
e.UseConcurrencyLimit(10);
e.PrefetchCount = 10;
e.Consumer<PersonConsumer>();
});
});

var personSendEndpoint = busControl.GetSendEndpoint(new Uri($"rabbitmq://localhost/{personQueueName}")).Result;

busControl.Start();

foreach (var x in Enumerable.Range(1, 20))
{
personSendEndpoint.Send(new PersonUpdated() { Name = "Mina Ives", Key = Guid.NewGuid() });
}

Console.ReadLine();
busControl.Stop();
}
}

internal class PersonConsumer : IConsumer<IPersonUpdated>
{
public async Task Consume(ConsumeContext<IPersonUpdated> context)
{
Thread.Sleep(1000);
Console.WriteLine($"Updated {context.Message.Name}");
}

}

最佳答案

Thread.Sleep(1000); 更改为 await Task.Delay(1000); 可解决您遇到的问题。

Thread.Sleep 出于某种原因对 TPL 造成严重破坏。

关于rabbitmq - 为什么 MassTransit 只在一个线程上消费消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39920076/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com