|
2 | 2 |
|
3 | 3 | [](https://sonar.1cdevelopers.ru/dashboard?id=integration_subsystem) |
4 | 4 |
|
5 | | -Подсистема создана для оптимизации процесса разработки новых интеграций. |
| 5 | +> 📚 **[Документация](https://integration-subsystem-docs.1cdevelopers.ru)** — полное руководство по установке, настройке и использованию подсистемы. |
6 | 6 |
|
7 | | -Основные задачи и возможности: |
| 7 | +Подсистема создана для оптимизации процесса разработки новых интеграций в 1С:Предприятие 8.3. |
8 | 8 |
|
9 | | -- Берет на себя инфраструктурный слой по формированию, отправке и получению сообщений. |
10 | | -- Контролирет входящие и исходящие потоки данных. |
11 | | - - Проверка соблюдения контрактов при приеме и формировании сообщений |
12 | | - - Мониторинг состаяния подсистемы при помощи Prometheus |
13 | | -- Базовая многопоточность из коробки. Формирование и отправка сообщений в несколько потоков |
14 | | -- Минимальное вмешательство в код основной конфигурации для внедрения |
15 | | -- Произвольные обработчики |
| 9 | +## Возможности |
| 10 | + |
| 11 | +- 🔄 **Управление потоками данных** — контроль входящих и исходящих потоков с поддержкой множества подписчиков |
| 12 | +- ✅ **Валидация по контрактам** — проверка соблюдения контрактов (OpenAPI 3.0) при приёме и формировании сообщений |
| 13 | +- 📊 **Мониторинг Prometheus** — сбор метрик состояния подсистемы в реальном времени |
| 14 | +- ⚡ **Многопоточность** — формирование и отправка сообщений в несколько потоков из коробки |
| 15 | +- 🔌 **Множество протоколов** — HTTP, RabbitMQ, Kafka, JRPC 2.0 |
| 16 | +- 🛠 **Произвольные обработчики** — гибкая настройка логики обработки сообщений |
| 17 | +- 📝 **Минимальное вмешательство** — простая интеграция в существующую конфигурацию |
16 | 18 |
|
17 | 19 | Оглавление: |
18 | 20 |
|
|
26 | 28 |
|
27 | 29 | ## Подписчики |
28 | 30 |
|
29 | | -Каждый исходящий поток может обладать несколькими подписчиками. Подписчики - это системы которые получают сообщения из потока. |
| 31 | +Каждый исходящий поток может обладать несколькими подписчиками. Подписчики — это системы, которые получают сообщения из потока. |
30 | 32 |
|
31 | | -Для каждого подписчика могуть быть заданы свои правила сериализации и валидации сообщений. |
| 33 | +Для каждого подписчика могут быть заданы свои правила сериализации и валидации сообщений. |
32 | 34 |
|
33 | | -На данный момент реализованы следующие типы подписчиков: |
| 35 | +Реализованные типы подписчиков: |
34 | 36 |
|
35 | | -- Произвольный http-подписчик. |
36 | | -- Подсистема интеграции. Такая же подсистема интегрированная в другой информационной базе. |
37 | | -- RabbitMQ. Подписчик, который отправляет сообщения в очередь RabbitMQ. |
38 | | -- Jrpc 2.0. Подписчик, который отправляет сообщения по протоколу Jrpc 2.0. |
| 37 | +| Тип | Описание | |
| 38 | +|-----|----------| |
| 39 | +| **HTTP** | Произвольный HTTP-подписчик с настраиваемыми заголовками и методами | |
| 40 | +| **Подсистема интеграции** | Интеграция с другой информационной базой через эту же подсистему | |
| 41 | +| **RabbitMQ** | Отправка сообщений в очередь RabbitMQ (AMQP) | |
| 42 | +| **Kafka** | Публикация сообщений в топики Apache Kafka | |
| 43 | +| **JRPC 2.0** | Отправка сообщений по протоколу JSON-RPC 2.0 | |
39 | 44 |
|
40 | 45 | ### Пост-Обработка ответов |
41 | 46 |
|
42 | 47 | Для каждого подписчика можно задать обработчик ответов. Обработчик ответов - это произвольный обработчик, который будет вызван после отправки сообщения. |
43 | 48 | В обработчик будет передан ответ от подписчика, а так же ссылка на исходные данные сообщения. |
44 | 49 |
|
45 | | -## Валидаиция |
| 50 | +## Валидация |
46 | 51 |
|
47 | | -В подсистеме реализован механизм валидации сообщений при приеме и отправке. Валидация происходит на основе контрактов, которые описывают структуру сообщения. |
48 | | -Формат описания контрактов - OpenAPI 3.0.0 |
| 52 | +В подсистеме реализован механизм валидации сообщений при приёме и отправке на основе контрактов **OpenAPI 3.0**. |
49 | 53 |
|
50 | | -Для хранение данных схем реализован справочник `инт_Схемы`. В нем хранится информация о схеме, и сама схема в формате JSON. |
51 | | -Так же реализовано кэширование схем размещенных в удаленных источниках. |
| 54 | +- **Справочник `инт_Схемы`** — хранение схем валидации в формате JSON |
| 55 | +- **Кэширование** — автоматическое кэширование схем из удалённых источников |
| 56 | +- **Валидация payload** — проверка структуры и типов данных сообщений |
52 | 57 |
|
53 | 58 | ## Мониторинг |
54 | 59 |
|
55 | | -Основные метрики собираются при помощи Prometheus. Для сбора метрик реализован сервис `http://example.com/integration_subsystem/hs/prometheus/polling`, который возвращает данные в формате prometheus. |
| 60 | +Подсистема предоставляет метрики в формате Prometheus через HTTP-сервис: |
| 61 | + |
| 62 | +``` |
| 63 | +GET /integration_subsystem/hs/prometheus/polling |
| 64 | +``` |
| 65 | + |
| 66 | +### Доступные метрики |
56 | 67 |
|
57 | | -### Метрики |
| 68 | +| Метрика | Описание | |
| 69 | +|---------|----------| |
| 70 | +| `pde_queue_length` | Количество сообщений в очереди (по каждой очереди отдельно) | |
| 71 | +| `pde_messages_sent_total` | Общее количество отправленных сообщений | |
| 72 | +| `pde_messages_failed_total` | Количество сообщений с ошибками | |
| 73 | +| `pde_processing_duration_seconds` | Время обработки сообщений | |
58 | 74 |
|
59 | | -- pde_queue_length - количество сообщений в очереди. Считается для каждой очереди в отдельности. |
| 75 | +## Быстрый старт |
60 | 76 |
|
61 | | -## Примеры использования |
| 77 | +### Создание исходящего потока |
62 | 78 |
|
63 | | -### Добавление нового потока |
| 79 | +1. Создайте предопределённый элемент справочника `инт_ПотокиДанных` |
| 80 | +2. Определите моменты триггера для отправки сообщений |
| 81 | +3. Добавьте регистрацию сообщения в очереди: |
64 | 82 |
|
65 | | -#### Создание исходящего потока |
| 83 | +```bsl |
| 84 | +РегистрыСведений.инт_ОчередьИсходящихСообщений.ЗарегистрироватьСообщение( |
| 85 | + ИсходныеДанные, // Ссылка на объект или ФиксированнаяСтруктура |
| 86 | + ПотокДанных // СправочникСсылка.инт_ПотокиДанных |
| 87 | +); |
| 88 | +``` |
66 | 89 |
|
67 | | -1. Создайте новый предопределенный элемент справочника "инт_ПотокиДанных" |
68 | | -1. Определите моменты триггера для отправки сообщений |
69 | | -1. Добавьте в момент триггера событие регистрации сообщения в очереди отправки(см. функцию ЗарегистрироватьСообщение в [модуле менеджера очереди исходящих сообщений.](src/cf/InformationRegisters/инт_ОчередьИсходящихСообщений/Ext/ManagerModule.bsl)) |
70 | | -1. Заполните в режиме предприятия направление потока(Исходящий) и текст обработчика. |
71 | | -1. Добавьте в ТЧ подписчики получателя ваших сообщений. |
| 90 | +4. В режиме предприятия заполните направление потока (Исходящий) и текст обработчика |
| 91 | +5. Добавьте подписчиков в табличную часть |
72 | 92 |
|
73 | | -## Планы на будущее |
| 93 | +Подробнее в [документации](https://integration-subsystem-docs.1cdevelopers.ru/guide/create-flow). |
74 | 94 |
|
75 | | -- [ ] Добавить возможность приема сообщений в несколько потоков |
76 | | -- [ ] Добавить поддержку протокола JRPC |
77 | | -- [ ] Добавить поддержку протокола AMQP и rabbitMQ |
78 | | -- [ ] Добавить версионирование обработчиков потоков в GIT |
79 | | -- [ ] Добавить поддержку asyncapi для описания контрактов и добавить валидацию не только пэйлоада, но и метаданных |
80 | | -- [x] Добавить поддержку внешних систем мониторинга |
81 | | -- [ ] Добавить динамические подписки на события по потокам |
82 | | -- [ ] Добавить синтаксическую подсказку по полям требуемых объектов на основании схемы контракта |
| 95 | +## Roadmap |
| 96 | + |
| 97 | +- [x] ~~Поддержка внешних систем мониторинга (Prometheus)~~ |
| 98 | +- [x] ~~Поддержка протокола JRPC 2.0~~ |
| 99 | +- [x] ~~Поддержка RabbitMQ (AMQP)~~ |
| 100 | +- [x] ~~Поддержка Apache Kafka~~ |
| 101 | +- [ ] Приём сообщений в несколько потоков |
| 102 | +- [ ] Версионирование обработчиков потоков в Git |
| 103 | +- [ ] Поддержка AsyncAPI для описания контрактов |
| 104 | +- [ ] Динамические подписки на события по потокам |
| 105 | +- [ ] Синтаксическая подсказка по полям на основании схемы контракта |
83 | 106 |
|
84 | 107 | ## Разработчикам |
85 | 108 |
|
86 | | -Информация для разработчиков подсистемы доступна по ссылке [CONTRIBUTING.md](CONTRIBUTING.md) |
| 109 | +Информация для разработчиков подсистемы доступна в [CONTRIBUTING.md](CONTRIBUTING.md). |
| 110 | + |
| 111 | +## Ссылки |
| 112 | + |
| 113 | +- 📚 [Документация](https://integration-subsystem-docs.1cdevelopers.ru) |
| 114 | +- 📊 [SonarQube](https://sonar.1cdevelopers.ru/dashboard?id=integration_subsystem) |
| 115 | +- 🐛 [Issues](https://github.com/Segate-ekb/integration_subsystem/issues) |
87 | 116 |
|
88 | 117 | ## Лицензия |
0 commit comments