Создание адаптера для Flow
Платформа Accelera позволяет создавать собственные адаптеры данных для обработки событий.
Задача адаптера - получение данных из системы источника, формирование события и отправка в Accelera Flows.
Вы можете создать собственный адаптер на любом подходящем для вас языке программирования. Главное требование - возможность подключения к RabbitMQ версии > 3.5.0
RabbitMQ имеет множество клиентский библиотек, что позволит вам создать максимально подходящий вам адаптер данных.
Определение события
Алгоритм каждого адаптера индивидуален, в зависимости от источника данных. Для начала вам следует определить что является событием из вашего источника.
Событие обязательно должно иметь идентификатор и имя. Опционально - тело контекста и идентификатор сценария, куда оно может быть отправлено.
Например, в таблице из базы данных можно принять 1 строку как одно событие. А в случае работы с потоком кликов с сайта - совокупность действий, которые могут быть сформированы с единое событие, например повторный просмотр продукта или незавершенная регистрация.
Типовая структура события:
{
"id": "123456789",
"event": "event_name",
"context": {
"name": "value"
}
}Формирование события и контекста
Выделите отдельно идентификатор события (event_id) и его имя (event_name), они должны быть строкового типа.
Если в вашем событии присутствует контекст (event_context), сформируйте его в JSON-структуру, например:
{
"TRANSACTION_DATE": "21-01-2021 11:36:30",
"ACCOUNT_NUMBER": "123456789",
"MERCHANT_CITY": "London",
"MERCHANT_COUNTRY": "UK",
"MERCHANT_CATEGORY": "5699"
"TRANSACTION_ID": "123456789"
}Если полученное событие необходимо отправить в определенный сценарий, получите идентификатор этого сценария (flow_id).
Перед отправкой
При запуске адаптера определите подключение к внутреннему обмену событий:
channel.assertExchange('ex-triggers', 'x-consistent-hash', { durable: true })Отправляйте сообщения в этот обмен.
Отправка события
Accelera Flows использует RabbitMQ в качестве канала данных для событий.
Перед отправкой преобразуйте ваш контекст в строку. Если в вашем событии нет контекста, то сформируйте его как пустой JSON - {}.
Если вы пишете на JS, можете воспользоваться функцией JSON.stringify(). В случае использовании библиотеки GSON Java воспользуйтесь методом .toJson(obj). Для остальных языков воспользуйтесь подходящей функцией/библиотекой.
Отправьте ваше событие в обмен ex-triggers в следующем формате:
let event = {
id: '123',
event: 'event',
context: {
"TRANSACTION_DATE": "21-01-2021 11:36:30",
"ACCOUNT_NUMBER": "123456789",
"MERCHANT_CITY": "London",
"MERCHANT_COUNTRY": "UK",
"MERCHANT_CATEGORY": "5699"
"TRANSACTION_ID": "123456789"
}
}
channel.publish('ex-triggers', event.id, Buffer.from(JSON.stringify(event)), { priority: 1 });Если у вас есть flow_id, то добавьте его аргумент в событие. В этом случае событие будет отправлено напрямую в указанный сценарий и проигнорировано остальными.
let event = {
id: '123',
event: 'event',
context: {
"TRANSACTION_DATE": "21-01-2021 11:36:30",
"ACCOUNT_NUMBER": "123456789",
"MERCHANT_CITY": "London",
"MERCHANT_COUNTRY": "UK",
"MERCHANT_CATEGORY": "5699"
"TRANSACTION_ID": "123456789"
},
flowId: 'kdsjhf12312'
}
channel.publish('ex-triggers', event_id, Buffer.from(JSON.stringify(event)), { priority: 1 });Параметр priority нужен для указания приоритета событий, обычные события из адаптеров должны иметь приоритет 1.