Переход с Msmq на RabbitMQ на MassTransit 2.10 - PullRequest
0 голосов
/ 19 февраля 2020

Я перемещаю старое приложение из Msmq в RabbitMQ. Приложение использует MassTransit 2.10, и мне нужна функция, которая возвращает количество сообщений в очереди для определенного типа сообщения c.

В текущей реализации есть эта строка кода, которая возвращает типы сообщений:

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

Можно ли заменить эту инструкцию чем-то похожим при использовании RabbitMQ?

Ответы [ 3 ]

1 голос
/ 20 февраля 2020

При переходе на RabbitMQ управление очередями отличается. Поскольку это брокер (по сравнению с MSMQ, который отличается от других), он был разработан с отдельным API управления и консолью. Существуют и другие библиотеки, которые можно использовать для подсчета количества сообщений, но не те, которые будут определять типы сообщений (поскольку для определения типа потребуется чтение каждого сообщения - что и делает этот метод MSMQ, описанный выше, кстати).

Я бы посоветовал взглянуть на HareDu , чтобы управлять вашим брокером из приложения / API.

0 голосов
/ 08 апреля 2020

Я решил проблему, используя следующую функцию, с 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 очереди из словаря, в котором я храню все очереди, используемые программным обеспечением.

0 голосов
/ 08 апреля 2020

API HareDu 2 Broker и Autofa c позволяют выполнять следующие действия:

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