如何获取 MassTransit IBus 的大小(消息数量)?

How to get size (number of messages) of a MassTransit IBus?

我正在使用 MassTransit 库的 InMemoryMessageBus,我想知道如何获得队列中的消息数量(总线的大小)。

使用内存中传输的任何特定队列中的邮件数量不可用。消息传递基于排队的任务计划程序,消息计数尚未可用。我不确定他们是否可以(好吧,很容易。一切皆有可能,但实际是另一回事)。

更新:已添加到 MassTransit 并将在下一个版本 (3.5.x) 中。 tracking issue 在 GitHub 上,包括新代码的示例用法。

如果您使用 RabbitMQ 作为传输,您可以使用 HareDu。 以下代码段将帮助您入门:

var client = HareDuFactory.New(x => x.ConnectTo(RabbitMqHostUrl));

var data = client
            .Factory<VirtualHostResources>(y => y.Credentials(RabbitMqUser, RabbitMqPass))
            .Queue
            .GetAll()
            .Data();

foreach (var queue in data)
{
/*then you can access                
queue.Name, queue.VirtualHostName, queue.Memory, queue.Messages,
queue.MessagesReady, queue.MessagesUnacknowledged, queue.Node, queue.IsDurable, queue.Consumers, queue.IdleSince */
}