Документация Accelera

Создание адаптера для 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.

На этой странице