在MassTransit 2.10上从Msmq切换到RabbitMQ

在MassTransit 2.10上从Msmq切换到RabbitMQ,rabbitmq,message-queue,masstransit,Rabbitmq,Message Queue,Masstransit,我正在将一个旧应用程序从Msmq移动到RabbitMQ。该应用程序使用MassTransit 2.10,我需要一个函数来返回特定消息类型的队列中的消息数 在当前实现中,有一行代码返回消息类型: var messages = MsmqEndpointManagement.New(endpoint.Address).MessageTypes(); 在使用RabbitMQ时是否可以用类似的指令替换此指令?当移动到RabbitMQ时,队列的管理是不同的。因为它是一个代理(与MSMQ相比,MSMQ是一个

我正在将一个旧应用程序从Msmq移动到RabbitMQ。该应用程序使用MassTransit 2.10,我需要一个函数来返回特定消息类型的队列中的消息数

在当前实现中,有一行代码返回消息类型:

var messages = MsmqEndpointManagement.New(endpoint.Address).MessageTypes();

在使用RabbitMQ时是否可以用类似的指令替换此指令?

当移动到RabbitMQ时,队列的管理是不同的。因为它是一个代理(与MSMQ相比,MSMQ是一个完全不同的代理),所以它是用一个单独的管理API和控制台设计的。还有其他库可以用来获取消息计数,但没有一个库可以获取消息类型(因为需要读取每条消息才能找到类型-顺便说一句,上面的MSMQ方法就是这么做的)


我建议您从应用程序/API管理您的代理。

使用HareDu 2代理和Autofac API,您可以执行以下操作:

var result = _container.Resolve<IBrokerObjectFactory>()
                .Object<Queue>()
                .GetAll()
                .Select(x => x.Data)
                .Select(x => new
                {
                    QueueName = x.Name, x.TotalMessages
                });
var result=\u container.Resolve()
.Object()
.GetAll()
.选择(x=>x.Data)
.选择(x=>new
{
QueueName=x.Name,x.TotalMessages
});

我已使用EasyNetQ的以下功能解决了此问题:

   public static int GetMessageCount(string queueName)
   {
       IQueue queue;
       IBus bus = getBusFromName(queueName);

       if (queues.TryGetValue(queueName, out queue))
           return (int)bus.Advanced.MessageCount(queue);

       return 0;
   }
getBusFromName()
是一个函数,用于从存储软件使用的所有队列的字典中检索队列的
IBus
实例