Создание и обработка сообщений
Отправляйте и обрабатывайте сообщения с помощью MassTransit.
«Создание и обработка сообщений» — бесплатный урок C# Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C# Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C# Academy содержит 4 уроков всего.
Регистрация MassTransit
Настройте MassTransit в DI: зарегистрируйте его, укажите транспорт (здесь RabbitMQ) и позвольте ему обнаружить Ваших потребителей.
builder.Services.AddMassTransit(x =>
{
x.AddConsumers(typeof(Program).Assembly);
x.UsingRabbitMq((context, cfg) =>
{
cfg.Host("localhost");
cfg.ConfigureEndpoints(context);
});
});Определение потребителя
Потребитель реализует IConsumer<T> для типа сообщения, которое он обрабатывает. Ваша логика находится в Consume, получающем ConsumeContext<T>.
public class OrderPlacedConsumer : IConsumer<OrderPlaced>
{
public async Task Consume(ConsumeContext<OrderPlaced> context)
{
OrderPlaced message = context.Message;
// handle the event
}
}Публикация события
Внедрите IPublishEndpoint и вызовите Publish, чтобы распространить событие среди всех подписчиков.
public class OrderService
{
private readonly IPublishEndpoint _publish;
public OrderService(IPublishEndpoint publish) => _publish = publish;
public Task PlaceOrderAsync(Guid id, string email) =>
_publish.Publish(new OrderPlaced(id, email));
}Отправка команды
Команды отправляются в конкретную конечную точку. Получите ISendEndpoint для назначения и вызовите Send.
var endpoint = await _sendProvider
.GetSendEndpoint(new Uri("queue:charge-payment"));
await endpoint.Send(new ChargePayment(orderId, amount));Сравнение Publish и Send
Publish используется для событий и доставляет их каждому подписанному потребителю, а Send — для команд и направляет команду в одну очередь. Правильный выбор определяет поведение маршрутизации.
Возможности ConsumeContext
ConsumeContext предоставляет не только сообщение: идентификаторы корреляции, заголовки, а также возможность публиковать сообщения или отправлять ответы из потребителя, что позволяет выстраивать цепочки сообщений.
public async Task Consume(ConsumeContext<OrderPlaced> context)
{
await context.Publish(new InvoiceRequested(context.Message.OrderId));
}Запрос и ответ
MassTransit также поддерживает обмен запросами и ответами посредством сообщений. Клиент запросов отправляет запрос и ожидает типизированный ответ. Это удобно, когда Вам нужен ответ, но Вы по-прежнему хотите сохранить слабую связанность с брокером.
var response = await _client
.GetResponse<OrderStatus>(new GetOrder(orderId));
OrderStatus status = response.Message;Именование конечных точек
ConfigureEndpoints автоматически именует конечную точку приёма (очередь) для каждого потребителя, используя соглашения. При необходимости Вы можете настроить имена с помощью форматтеров или явной конфигурации.
Сериализация сообщений
По умолчанию MassTransit сериализует сообщения в формате JSON и добавляет метаданные (тип сообщения, идентификаторы). Производители и потребители используют общие типы контракта сообщений, которые часто находятся в общем пакете.
Параллельная обработка
Потребитель может обрабатывать множество сообщений параллельно. Настройте PrefetchCount и ограничения параллелизма, чтобы сбалансировать пропускную способность и возможности последующих систем.
cfg.ReceiveEndpoint("orders", e =>
{
e.PrefetchCount = 16;
e.ConcurrentMessageLimit = 8;
e.ConfigureConsumer<OrderPlacedConsumer>(context);
});Тестирование потребителей
MassTransit предоставляет тестовый стенд в памяти, поэтому Вы можете опубликовать сообщение и проверить, что потребитель его обработал, без настоящего брокера.
Быстрая проверка
Проверьте создание и обработку сообщений.
Итоги
Зарегистрируйте MassTransit с помощью AddMassTransit, транспорта и ConfigureEndpoints. Потребители реализуют IConsumer<T> с методом Consume. Используйте IPublishEndpoint.Publish для событий (всех подписчиков) и ISendEndpoint.Send для команд (одной очереди). ConsumeContext позволяет выстраивать цепочки и реализовывать обмен запросами и ответами, а тестовый стенд проверяет потребителей в памяти.
Изучай C# с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 93
- Уроки
- 346
Часто задаваемые вопросы
Урок «Создание и обработка сообщений» бесплатный?
Да — полный текст урока «Создание и обработка сообщений» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C# Academy, подпишись на CoddyKit PRO. Курс C# Academy содержит 4 уроков всего.
Чему я научусь в уроке «Создание и обработка сообщений»?
Отправляйте и обрабатывайте сообщения с помощью MassTransit. Ты практикуешь C# Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать C# Academy?
Предыдущий опыт не требуется. C# Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Создание и обработка сообщений»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке C# Academy?
Да. Каждый урок C# Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Основы обмена сообщениями
- Создание и обработка сообщений
- Саги и рабочие процессы
- Обработка ошибок и повторные попытки