在使用MassTransit消耗队列中的所有消息之后,我尝试停止总线。我将并发消息限制设置为1,因为我的使用者需要一次处理一条消息。
我尝试将bus.StopAsync()放在bus.StartAsync后面,如下所示。结果表明,在消耗了一条消息之后,总线将停止。
总线配置:
IBusControl bus = Bus.Factory.CreateUsingRabbitMq(cfg =>
{
IRabbitMqHost host = cfg.Host(new Uri("rabbitmq://localhost"), hostConfigurator =>
{
hostConfigurator.Username("username");
hostConfigurator.Password("password");
});
cfg.ReceiveEndpoint(host, "MyResult", ep =>
{
ep.Bind("MyExchange", s => { s.Durable = true; });
ep.Consumer<MessageConsumer>(mc =>
{
mc.UseConcurrentMessageLimit(1);
});
});
});
公交起停:
await bus.StartAsync();
await bus.StopAsync();
我的问题是队列中的所有消息都用完后如何停止总线。我对MassTransit相当陌生,并且真的对调用消费者和停止公交的顺序感到好奇。感谢有人可以帮忙。谢谢。
答案 0 :(得分:0)
在“测试”名称空间中,有一个功能可用来监视总线上的活动,该功能可用于发出信号,表明没有消息被占用(此后,您可以按照建议的方式停止总线)。
使用以下方式添加观察者:
var activityMonitor = bus.CreateBusActivityMonitor(TimeSpan.FromMilliseconds(500));
总线空闲后,超时时间为true:
var timeout = await activityMonitor.AwaitBusInactivity(TimeSpan.FromSeconds(10));
如果timeout
为true,则在指定的时间内总线上没有活动。