Статьи

Клиентский прокси AC # .NET для API управления RabbitMQ

 

RabbitMQ поставляется с очень приятным пользовательским интерфейсом управления и HTTP JSON API , который позволяет вам настраивать и контролировать вашего брокера RabbitMQ. С веб-сайта:

« Плагин rabbitmq-management предоставляет HTTP-API для управления и мониторинга вашего сервера RabbitMQ, а также интерфейс на основе браузера и инструмент командной строки rabbitmqadmin . Особенности включают в себя:

  • Объявите, перечислите и удалите обмены, очереди, привязки, пользователей, виртуальные хосты и разрешения.
  • Отслеживать длину очереди, скорость передачи сообщений в глобальном масштабе и для каждого канала, скорость передачи данных для каждого соединения и т. Д.
  • Отправлять и получать сообщения.
  • Мониторинг процессов Erlang, файловых дескрипторов, использования памяти.
  • Экспорт / импорт определений объектов в JSON.
  • Принудительно закрывать соединения, очищать очереди. »

Не было бы здорово, если бы вы могли выполнять все эти задачи управления из своего кода .NET? Ну, теперь вы можете. Я только что добавил новый проект в EasyNetQ под названием EasyNetQ.Management.Client . Это клиентский прокси .NET для HTTP-API.

Это на NuGet , поэтому для его установки вы просто запускаете:

PM> Install-Package EasyNetQ.Management.Client

Чтобы получить общее представление о том, что вы можете делать с EasyNetQ.Client.Management, взгляните на этот код. Сначала он создает новый виртуальный хост и пользователя и дает пользователю разрешения на виртуальный хост. Затем он повторно подключается как новый пользователь, создает обмен и очередь, связывает их и публикует сообщение для обмена. Наконец, он получает первое сообщение из очереди и выводит его на консоль.

var initial = new ManagementClient("http://localhost", "guest", "guest");

// first create a new virtual host
var vhost = initial.CreateVirtualHost("my_virtual_host");

// next create a user for that virutal host
var user = initial.CreateUser(new UserInfo("mike", "topSecret"));

// give the new user all permissions on the virtual host
initial.CreatePermission(new PermissionInfo(user, vhost));

// now log in again as the new user
var management = new ManagementClient("http://localhost", user.name, "topSecret");

// test that everything's OK
management.IsAlive(vhost);

// create an exchange
var exchange = management.CreateExchange(new ExchangeInfo("my_exchagne", "direct"), vhost);

// create a queue
var queue = management.CreateQueue(new QueueInfo("my_queue"), vhost);

// bind the exchange to the queue
management.CreateBinding(exchange, queue, new BindingInfo("my_routing_key"));

// publish a test message
management.Publish(exchange, new PublishInfo("my_routing_key", "Hello World!"));

// get any messages on the queue
var messages = management.GetMessagesFromQueue(queue, new GetMessagesCriteria(1, false));

foreach (var message in messages)
{
    Console.Out.WriteLine("message.payload = {0}", message.payload);
}

Эта библиотека также идеально подходит для мониторинга уровней очереди, каналов и соединений в вашем брокере RabbitMQ. Например, этот код выводит подробную информацию обо всех текущих подключениях к брокеру RabbitMQ:

var connections = managementClient.GetConnections();

foreach (var connection in connections)
{
    Console.Out.WriteLine("connection.name = {0}", connection.name);
    Console.WriteLine("user:\t{0}", connection.client_properties.user);
    Console.WriteLine("application:\t{0}", connection.client_properties.application);
    Console.WriteLine("client_api:\t{0}", connection.client_properties.client_api);
    Console.WriteLine("application_location:\t{0}", connection.client_properties.application_location);
    Console.WriteLine("connected:\t{0}", connection.client_properties.connected);
    Console.WriteLine("easynetq_version:\t{0}", connection.client_properties.easynetq_version);
    Console.WriteLine("machine_name:\t{0}", connection.client_properties.machine_name);
}

На моей машине с одним работающим потребителем он выводит это:

connection.name = [::1]:64754 -> [::1]:5672
user:   guest
application:    EasyNetQ.Tests.Performance.Consumer.exe
client_api: EasyNetQ
application_location:   D:\Source\EasyNetQ\Source\EasyNetQ.Tests.Performance.Consumer\bin\Debug
connected:  14/11/2012 15:06:19
easynetq_version:   0.9.0.0
machine_name:   THOMAS

Вы можете увидеть название приложения, которое устанавливает соединение, машину, на которой оно работает, и даже его расположение на диске. Это довольно мило. Исходя из этой информации, не составит труда автоматически сгенерировать полную системную диаграмму вашего приложения распределенного обмена сообщениями. Теперь есть идея ?