Получение сообщений из БД
Для интеграции с внешними сервисами можно использовать бизнес-хуки – сообщения, добавляемые в очередь Oracle при определенных событиях, которые потом можно задействовать в сторонних приложениях.
Рекомендуется забирать сообщения во внешний сервис не напрямую из очереди Oracle, а с использованием брокеров сообщений, таких как ActiveMQ. Такой подход позволит:
- растиражировать сообщение нескольким приложениям (прямой забор сообщения из очереди Oracle удалит это сообщение и более к нему обращаться будет нельзя)
- не задействовать пул подключений к Oracle (в отдельных случаях все сокеты для подключения к Oracle могут оказаться заняты и приложение, пытающееся подключиться к очереди Oracle, сделать этого не сможет)
Пример настройки для ActiveMQ
Для базовой настройки передачи сообщений необходимо в конфигурационный файл брокера добавить правило маршрутизации:
<route> <from uri="oracleTopic:topic:AIS_NET.HYDRA_MESSAGES?clientId=ActiveMQ&durableSubscriptionName=HP"/> <to uri="activemq:queue:hydra_messages"/> </route>
Если ActiveMQ работает не под AIS_NET, может потребоваться выдать права на очередь
BEGIN DBMS_AQADM.grant_queue_privilege ( privilege => 'DEQUEUE', queue_name => 'AIS_NET.HYDRA_MESSAGES', grantee => 'AIS_PROVISIONING', grant_option => TRUE); END;
После этого ActiveMQ будет забирать сообщения из Oracle и помещать в очередь hydra_messages.
Другие примеры настройки маршрутизации сообщений доступны в статье Примеры особых конфигураций ActiveMQ
Структура сообщений
Бизнес-хуки передаются в формате XML и состоят из элементов:
- message_type_id - идентификатор записи из базового справочника "Тип сообщения" (REF_TYPE_MessageType)
- message_type_code - код записи из базового справочника "Тип сообщения" (REF_TYPE_MessageType)
- version - (пустое значение, зарезервировано для будущих версий)
- created_at - время отправки сообщения в таймзоне БД
payload - подробности события, состав зависит от типа сообщения:
Код типа сообщения Событие Состав сообщения Элемент Описание MESSAGE_TYPE_Payment Актуализация платёжного поручения
или проведение платежа
document_id Идентификатор платежного поручения account_id Идентификатор лицевого счета, на который зачислен платеж MESSAGE_TYPE_Charge Информация о начислении charge_log_id Идентификатор акта начислений charge_log_line_id Идентификатор строки акта начислений change_balance_type_id Идентификатор значения из базового справочника "Тип изменения баланса" (REF_TYPE_ChangeBalanceType) MESSAGE_TYPE_CreditLimit Изменение суммы кредитного лимита document_id Документ-основание account_id Идентификатор лицевого счета MESSAGE_TYPE_Correction Проведение корректировок account_id Идентификатор лицевого счета charge_log_id Идентификатор акта начислений по корректировке MESSAGE_TYPE_StopSrvProv Прекращение оказания услуг charge_log_id Идентификатор акта начислений MESSAGE_TYPE_ArchiveDoc Архивирование документа charge_log_id Идентификатор акта начислений MESSAGE_TYPE_AutoTopUp Подписка на автоплатеж account_id Идентификатор лицевого счета auto_top_up_id Идентификатор подписки auto_top_up_state_id Состояние автоплатежа MESSAGE_TYPE_SubjValue Изменение значения дополнительного параметра субъекта
subject_id Идентификатор субъекта subject_type_id Тип субъекта additional_value_type_id Тип доп. параметра additional_value_id Идентификатор доп. параметра additional_value Значение доп. параметра