1c + kafka.apache
Пример построения микросервисов с использованием apache kafka. Данная статья будет полезна интеграторам, программистам. Версия и релиз технологической платформы не имеет значения.
- Описание
- Подробнее
Описание
Пример построения микросервисов с использованием apache kafka.
Задача:
Построить событийную архитектуру между приложениями(микросервисы)(не только 1с).
Общая логика решения задачи():
1. Приложение А генерирует событие
2. Другое приложение Б(В, Г..) "слушает" кафка (подписывается на событие)(если коротко)
3. Приложение А отправляет данные кафка (Поставщик)
4. кафка отправляет данные всем кто подписан на это событие (Потребитель)
5. Приложение Б(В, Г..) получает данные
Технологии:
1. 1с (поставщик, потребитель, tcp клиент)
2. Разнородный бэкенд (python, и тд) (поставщик, потребитель)
3. с++ 1с вк native (транспорт для tcp клиента 1с)
4. apache kafka (шина данных) https://kafka.apache.org
5. flask (python micro web сервер) http://flask.pocoo.org
6. tcp сервер (python)
7. KafkaConsumer, KafkaProducer (python) https://github.com/dpkp/kafka-python
Общая принцип работы(модули):
1с(1):
При запуске 1с стартует tcp клиент (вк native)(3) .Устанавливает соединение с tcp сервером(6) (передавая ид пользователя из 1с). Подписывается на событие вк native. При наступления события уходит в контекст 1с через ОбработкаВнешнегоСобытия для последующей обработки. Для генерации событий выполняет гет, пост запросы на веб сервер(5).
tcp сервер(6):
Хеш таблица открытых сокетов(активных соединений) и ид пользователя. Подписывается на события шины данных для отправки клиенту 1с. При наступлении событий отправляет данные в сокет(клиенту 1с). Генерирует события при авторизации(установка сокета), выхода(разрыв, закрытие сокета) в шину данных.
web сервер(5):
Обрабатывает запросы со стороны 1с(прокси для кафка) и отправляет в шину данных. Также подписывается на события сторонних приложений требующих отправку данных для 1с(изменился статус звонка asterisk, прилетел тригер для обновления формы, перегнать что то с &НаСервере на &НаКлиенте , и тд).
Шина данных(4):
Управляет оркестром приложений(упорядоченная очередь). При наступлении события маршутизирует подписчикам, если подсписчиков нет, хранит у себя, доставит потом когда появятся.
Разнородный бэкенд(2):
Подписывается, генерирует события в шину данных.(например web app time line(журнал записи), asterisk ami client(автообзвон, фонер), из предыдущих статей)
Шаг 1. tcp сервер
