В настоящее время я строю систему, следуя «образцу конкурирующего потребителя» в. Net Core. Таким образом, я поместил JobRequest-Message в очередь, на которую подписаны несколько потребителей (работников). Один из получателей получает сообщение и выполняет фактическую обработку задания.
У меня также есть требование для построения системы "независимой от поставщика". Это означает, что мне нужно реализовать систему таким образом, чтобы я мог легко переключаться между поставщиками брокеров сообщений, например: RabbitMq, Azure Service Bus, Amazon SQS, (Kafka).
В настоящее время мы находимся Обсуждая наилучший вариант для архивации, мы предложили следующие альтернативы:
- Интерфейсы и различные реализации для каждого поставщика
Я создаю интерфейсы для различных функций, которые мне нужны для моего система и использовать клиентские библиотеки поставщиков для реализации этих интерфейсов. Недостаток, конечно, в том, что мне нужно написать реализацию для каждого поставщика.
с использованием стандартных клиентских библиотек AMQP 1.0
Я придерживаюсь стандарта AMQP и использую стандартные библиотеки AMQP (https://github.com/Azure/amqpnetlite) для своей реализации. Все брокеры сообщений на основе AMQP должны работать только с одной реализацией. Недостатком является то, что я зависим от AMQP, а также от версии AMQP (RabbitMQ в настоящее время использует 0,9, Kafka не использует AMQP).
с использованием служебной шины сверху, которая уже поддерживает разных брокеров
Как NServiceBus или MassTransit (с открытым исходным кодом). Это добавит дополнительную зависимость к моей системе и увеличит ее площадь. NServiceBus также не является бесплатным, и он каким-то образом просто перенесет «зависимость от поставщика» на служебную шину.
Цель качества номер один - создать надежную и отказоустойчивую систему (> 100 000 рабочих запросов в день).
Пожалуйста, поделитесь своими мыслями:)