Эта статья о EasyNetQ, библиотеке для использования RabbitMQ с .NET. На момент написания этой статьи EasyNetQ все еще была предварительной версией программного обеспечения . Несмотря на это, несколько человек использовали его в производственной среде некоторое время. Если вы используете его в производстве, это на ваш страх и риск.
В августе прошлого года я написал « Начало работы с RabbitMQ с .NET» . Это, помимо прочего, показало, как вы можете получать сообщения из очереди RabbitMQ с помощью официальной клиентской библиотеки RabbitMQ .NET.
Хотя это и прекрасно, но часто предпочтительнее использовать библиотеку более высокого уровня, которая заботится о мелких деталях и позволяет вам сосредоточиться на реальном обмене сообщениями в структурированном виде. Ну, вот почему EasyNetQ существует . С EasyNetQ вам не нужно беспокоиться о таких вещах, как сериализация, шаблоны обмена сообщениями, надежность соединения и т. Д. В оставшейся части этой статьи мы увидим, как легко отправлять и получать сообщения с помощью EasyNetQ.
Конечно, первое, что нам нужно сделать, это установить пакет EasyNetQ NuGet:
Затем давайте создадим класс, который представляет сообщения, которые мы будем отправлять. В этом примере мы представим, что отправляем позицию игрока в игре:
public class PlayerPosition
{
public int X { get; set; }
public int Y { get; set; }
}
Получив это, мы можем подписаться на сообщения, поступающие в очередь. Это сделано так:
using (var bus = RabbitHutch.CreateBus("host=localhost"))
{
bus.Subscribe<PlayerPosition>("MyGame", playerPosition =>
Console.WriteLine($"{playerPosition.X}, {playerPosition.Y}"));
Console.ReadLine();
}
Итак, вы объявляете свою очередь, используя RabbitHutch.CreateBus()
. Автобус это просто очередь. Так что же RabbitHutch
? Ну что я могу сказать? Это клетка для кроликов .
Обратите внимание, как мы подписываемся специально, чтобы получать сообщения типа PlayerPosition
. Мы используем идентификатор подписки «MyGame», и мы также передаем обработчик, который указывает, что делать с полученным сообщением. Если синтаксис выглядит немного незнакомым, это потому, что я использую интерполяцию строк , новую функцию языка C #, представленную в C # 6.0.
Когда мы запустим это, мы увидим, что создана очередь с именем, созданным из имени класса сообщения и subscriptionId:
Теперь, чтобы понять, что происходит в очереди, давайте пока остановим подписчика.
Мы можем отправить сообщение в очередь следующим образом:
using (var bus = RabbitHutch.CreateBus("host=localhost"))
{
var playerPosition = new PlayerPosition() { X = 1, Y = 2 };
bus.Publish<PlayerPosition>(playerPosition);
Console.ReadLine();
}
Обратите внимание, как мы отправляем строго типизированный объект (в отличие от свободной строки), который мы предоставляем в качестве универсального параметра. Конечно, вы можете не указывать общий параметр, но я включил его выше для ясности.
Теперь мы можем проверить сообщение в очереди из раздела «Получить сообщения» в веб-интерфейсе управления RabbitMQ:
Как видите, отправленные нами данные сериализуются в JSON, а также сопровождаются информацией о типах, которая помогает EasyNetQ десериализовать их на принимающей стороне.
Фактически, теперь мы можем снова запустить нашего подписчика и увидеть, что он потребляет сообщение:
Таким образом, вы можете увидеть, как EasyNetQ позволяет легко сосредоточиться на обмене сообщениями и оставить все детали. Естественно, с EasyNetQ вы можете сделать гораздо больше, чем показано в этой вводной статье. Проверьте документацию EasyNetQ для получения дополнительной информации.