Получение сообщений из БД
Для интеграции с внешними сервисами можно использовать бизнес-хуки – сообщения, добавляемые в очередь 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>
До - AIS-8849Getting issue details... STATUS
До версий ядра 6.0.0.178 / 6.2.0.79
Если ActiveMQ работает не под AIS_NET, может потребоваться выдать права на очередь
BEGIN DBMS_AQADM.GRANT_SYSTEM_PRIVILEGE( GRANTEE => 'AIS_PROVISIONING', PRIVILEGE => 'MANAGE_ANY' ); DBMS_AQADM.grant_queue_privilege ( privilege => 'DEQUEUE', queue_name => 'AIS_NET.HYDRA_MESSAGES', grantee => 'AIS_PROVISIONING', grant_option => TRUE); END; / GRANT EXECUTE ON DBMS_AQIN TO AIS_PROVISIONING; /
После этого ActiveMQ будет забирать сообщения из Oracle и помещать в очередь hydra_messages.
После - AIS-8849Getting issue details... STATUS
После версий ядра 6.0.0.178 / 6.2.0.79
ActiveMQ следует подключаться к HYDRA_MESSAGES под пользователем AIS_3P_SERVICES, а не AIS_PROVISIONING, как было раньше. Для этого пользователь бд AIS_3P_SERVICES должен быть активен и привязан к приложению, а также требуется наличие права "Синхронизация со сторонними сервисами" хотя бы у одного абонента.
Обратите внимание, что права на очереди выдаются и забираются пользователем AIS_NET, поэтому при выдаче права "Синхронизация со сторонними сервисами" с интерфейса ООС может потребоваться включенное задание "Отложенное исполнение задач", которое при наличии недостающих прав пользователей БД выполнит синхронизацию прав согласно указанным во внутренних настройках гидры (подобно выдачи прав на представления, таблицы и пакеты).
Другие примеры настройки маршрутизации сообщений доступны в статье Примеры особых конфигураций ActiveMQ
Отключение бизнес-хуков
В версиях 6.0.0.172 и 6.2.0.69 была добавлена возможность отключить отправку бизнес-хуков. Соответствующий чекбокс появился в системных параметрах в ООС.
Структура сообщений
Бизнес-хуки передаются в формате 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 Значение доп. параметра MESSAGE_TYPE_AutoTopUpPayment Результат проведения автоплатежа. Добавлено в 6.2.0.28 account_id Идентификатор лицевого счета request_state_id Статус проведения автоплатежа refuse_reason_Id Причина неуспешного проведения автоплатежа. Необязательное поле. MESSAGE_TYPE_ChangeDocState
Изменение состояния документа (6.2.0.39) document_id Идентификатор документа document_type_id Тип документа new_state_id Новое состояние документа old_state_id Старое состояние документа