У меня есть два проекта: один из них многопроцессорный, а второй однопроцессорный. Оба они написаны на Node JS.
Кроме того, я использую три системы, а именно: Loggly, Mixpanel, система электронной почты. Есть некоторые события, которые имеют отношение к обоим проектам, например, транзакция некоторых продуктов.
Как только происходит событие транзакции, мне нужно сделать три основные вещи: 1) Обновите Loggly о свойствах транзакции. 2) Обновите Mixpanel о свойствах транзакции. 3) Обновить систему электронной почты (например - отправить письмо с подтверждением транзакции).
Данные отправляются в формате JSON.
Кроме того, часть событий актуальна для всех трех систем (Loggly, Mixpanel, система электронной почты), а часть актуальна только для части из них.
Каждая система заинтересована в другой части данных. Например, некоторым системам нужны все данные, в то время как другие используют только небольшую часть данных о событии.
Вопрос: В настоящее время в моем проекте - как только происходит событие - я отправляю данные из двух проектов напрямую в соответствующие системы. Это означает, что мой код дублируется в 2-х проектах (и это плохо).
Например:
// call when transaction event happens
function foo(transactionData) {
Loggly.send('Transaction', transactionData);
Mixpanel.send('Transaction', transactionData);
}
Я ищу новую архитектуру, которая может решить проблему дублирования кода. Какова наилучшая архитектура для этого — сочетание шаблона Pub-Sub и инструментов AWS?
Каков правильный способ сделать это?
Спасибо за вашу помощь.





Поскольку вы работаете с AWS, я предлагаю узнать больше об Amazon SNS https://aws.amazon.com/pub-sub-messaging/.
Вы можете настроить «Тему» в SNS, которая затем будет рассылать сообщения любым службам, на которые она подписана.
В шаблоне дизайна Pub-Sub издатель и подписчик не знают о существовании друг друга. Как только происходит событие транзакции, мне нужно отправить данные во все три системы, включая систему электронной почты, поэтому мне нужно добавить данные привязки (для шаблона электронной почты) к данным события. Как я могу решить эту проблему?