В рамках микросервисной архитектуры достаточно легко делать «реактивные» сервисы: к вам приходит событие или вызов HTTP-метода, и в ответ на это происходит какое-то действие. Однако бывают более сложные сценарии, когда надо собрать некоторое количество информации или событий прежде, чем что-то делать. В таком случае нужен пайплайн — механизм организации сложных правил обработки событий.
Недавно нам пришлось организовать пайплайн с использованием интересных С++-трюков. О них я и расскажу в статье.
— Как хранить в одном контейнере разные типы и использовать тип в качестве ключа контейнера
— Как средствами метапрограммирования удобно сериализовать и десериализовать разнотипные объекты
— Как сделать универсальный запускатель функций, который будет запускать любую функцию и сам искать, откуда «добыть» эти аргументы
— И главное, как сделать интерфейс для написания пайплайна обработки события — удобный и полностью изолированный от инфраструктуры