Хобрук: Ваш путь к мастерству в программировании

RabbitMq обработать полученное сообщение асинхронным способом

Я использую RabbitMq для обработки сообщений, которые я получаю в автобусе. Мне было интересно, есть ли лучший способ обработать сообщение, которое я получаю (возможно, используя шаблон async/await)

Вот фрагмент моего кода

connection = connectionFactory.CreateConnection();

channel = connection.CreateModel();

channel.QueueDeclare(queue: Constants.RabbitListeningQueue,durable: false,exclusive: false,autoDelete: false,arguments: null);
channel.QueueDeclare(queue: Constants.RabbitMqRequestInsertedQueue,durable: false,exclusive: false,autoDelete: false,arguments: null);

var consumer = new EventingBasicConsumer(channel);
consumer.Received += (model, ea) =>
{
    log.Debug($"[x] Received message :{ea}");
    var body = ea.Body;
    var message = Encoding.UTF8.GetString(body);

    var dynamicObject = JObject.Parse(message);

    queueMessageHandler.HandleMessage(dynamicObject);
};

Реализация queueMessageHandler выглядит следующим образом

public class QueueMessageHandler : IQueueMessageHandler
{
    private readonly IImportNucleoManager importNucleoManager;

    public QueueMessageHandler(IImportNucleoManager importNucleoManager)
    {
        this.importNucleoManager = importNucleoManager;
    }

    public void HandleMessage(dynamic message)
    {
        switch ((string)message.Type)
        {
            case "T1":
            {
                importNucleoManager.Process(message);
                break;
            }
            case "T3":
                importNucleoManager.ProceedToInsertStep(message);
                break;
        }
    }
}

Мне было интересно (поскольку обработка событий T1/T3 занимает много времени), должны ли они быть Task, и поэтому даже HandleMessage должно быть HandleMessageAsync? В этом случае я также должен передать async void, что, насколько я знаю, не является лучшей практикой.


Новые материалы

Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

Как настроить Selenium в проекте Angular
Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

Аргументы прогрессивного улучшения почти всегда упускают суть
В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

Введение в Джанго Фреймворк
Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..

Настольный ПК как «одно кольцо, чтобы править всеми» домашних компьютеров
Вид после 9 месяцев использования С настольных компьютеров все началось, но в какой-то момент они стали «серверами», и мы все перешли на ноутбуки. В прошлом году я столкнулся с идеей настольных..

Расширенные методы безопасности для VueJS: реализация аутентификации без пароля
Руководство, которое поможет вам создавать безопасные приложения в долгосрочной перспективе Безопасность приложений часто упускается из виду в процессе разработки, потому что основная..

стройный-i18следующий
Представляем стройную оболочку для i18next. Эта библиотека, основанная на i18next, заключает экземпляр i18next в хранилище svelte и отслеживает события i18next, такие как languageChanged,..