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