Page tree
Skip to end of metadata
Go to start of metadata

Получение сообщений из БД

Для интеграции с внешними сервисами можно использовать бизнес-хуки – сообщения, добавляемые в очередь Oracle при определенных событиях, которые потом можно задействовать в сторонних приложениях.

Очередь работает в многопотребительском режиме: сообщение доступно нескольким подписчикам. Сообщение остается в очереди, пока его не прочитают все подписчики, подтвердив получение.

Рекомендуется забирать сообщения во внешний сервис не напрямую из очереди Oracle, а с использованием брокеров сообщений, таких как ActiveMQ. Такой подход позволит:

  • растиражировать сообщение нескольким приложениям (прямой забор сообщения из очереди Oracle удалит это сообщение и более к нему обращаться будет нельзя)
  • не задействовать пул подключений к Oracle (в отдельных случаях все сокеты для подключения к Oracle могут оказаться заняты и приложение, пытающееся подключиться к очереди Oracle, сделать этого не сможет)

Пример настройки для ActiveMQ

Для базовой настройки передачи сообщений необходимо в конфигурационный файл брокера добавить правило маршрутизации:

        <route>
            <from uri="oracleTopic:topic:AIS_NET.HYDRA_MESSAGES?clientId=ActiveMQ&amp;durableSubscriptionName=HP"/>
            <to uri="activemq:queue:hydra_messages"/>
        </route>

До  AIS-8849 - Getting 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-8849 - Getting 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.28account_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Старое состояние документа

Примеры сообщений

MESSAGE_TYPE_Payment
<message>
  <message_type_id>1208</message_type_id>
  <message_type_code>MESSAGE_TYPE_Payment</message_type_code>
  <version/>
  <created_at>2022-01-28T12:12:00</created_at>
  <payload>
    <payment>
      <document_id>12811629901</document_id>
      <account_id>178500901</account_id>
    </payment>
  </payload>
</message>
MESSAGE_TYPE_Charge
<message>
  <message_type_id>2208</message_type_id>
  <message_type_code>MESSAGE_TYPE_Charge</message_type_code>
  <version/>
  <created_at>2022-07-14T00:08:43</created_at>
  <payload>
    <charge>
      <charge_log_id>289145601</charge_log_id>
      <charge_log_line_id>409855401</charge_log_line_id>
      <change_balance_type_id>3210</change_balance_type_id>
    </charge>
  </payload>
</message>
MESSAGE_TYPE_CreditLimit
<message>
  <message_type_id>3208</message_type_id>
  <message_type_code>MESSAGE_TYPE_CreditLimit</message_type_code>
  <version/>
  <created_at>2022-07-14T00:25:48</created_at>
  <payload>
    <credit_limit>
      <document_id>411763901</document_id>
      <account_id>133193991</account_id>
    </credit_limit>
  </payload>
</message>
MESSAGE_TYPE_Correction
<message>
  <message_type_id>4208</message_type_id>
  <message_type_code>MESSAGE_TYPE_Correction</message_type_code>
  <version/>
  <created_at>2022-07-13T00:14:30</created_at>
  <payload>
    <correction>
      <charge_log_id>321755501</charge_log_id>
      <account_id>21121191</account_id>
    </correction>
  </payload>
</message>
MESSAGE_TYPE_StopSrvProv
<message>
  <message_type_id>5208</message_type_id>
  <message_type_code>MESSAGE_TYPE_StopSrvProv</message_type_code>
  <version/>
  <created_at>2022-06-22T12:05:25</created_at>
  <payload>
    <stop_service_provisioning>
      <charge_log_id>199968101</charge_log_id>
    </stop_service_provisioning>
  </payload>
</message>
MESSAGE_TYPE_ArchiveDoc
<message>
  <message_type_id>6208</message_type_id>
  <message_type_code>MESSAGE_TYPE_ArchiveDoc</message_type_code>
  <version/>
  <created_at>2022-05-22T11:05:25</created_at>
  <payload>
    <archive_document>
      <charge_log_id>188983101</charge_log_id>
    </archive_document>
  </payload>
</message>
MESSAGE_TYPE_AutoTopUp
<message>
  <message_type_id>7208</message_type_id>
  <message_type_code>MESSAGE_TYPE_AutoTopUp</message_type_code>
  <version/>
  <created_at>2022-04-22T13:23:21</created_at>
  <payload>
    <auto_top_up>
      <account_id>188983101</account_id>
      <auto_top_up_id>7581101</auto_top_up_id>
      <auto_top_up_state_id>2195</auto_top_up_state_id>
    </auto_top_up>
  </payload>
</message>
MESSAGE_TYPE_SubjValue
<message>
  <message_type_id>8208</message_type_id>
  <message_type_code>MESSAGE_TYPE_SubjValue</message_type_code>
  <version/>
  <created_at>2022-07-11T08:11:36</created_at>
  <payload>
    <subject_value>
      <subject_id>397259401</subject_id>
      <subject_type_id>18001</subject_type_id>
      <additional_value_type_id>18101</additional_value_type_id>
      <additional_value_id>397259501</additional_value_id>
      <additional_value/>
    </subject_value>
  </payload>
</message>
MESSAGE_TYPE_AutoTopUpPayment
<message>
  <message_type_id>13208</message_type_id>
  <message_type_code>MESSAGE_TYPE_AutoTopUpPayment</message_type_code>
  <version/>
  <created_at>2022-04-22T13:23:21</created_at>
  <payload>
    <atu_payment>
      <account_id>188983101</account_id>
      <request_state_id>3197</request_state_id>
      <refuse_reason_id>51198</refuse_reason_id>
    </atu_payment>
  </payload>
</message>
MESSAGE_TYPE_ChangeDocState
<message>
  <message_type_id>14208</message_type_id>
  <message_type_code>MESSAGE_TYPE_ChangeDocState</message_type_code>
  <version/>
  <created_at>2024-04-26T15:19:31</created_at>
  <payload>
    <change_doc_state>
      <document_id>188983101</document_id>
      <document_type_id>7002</document_type_id>
      <new_state_id>4003</new_state_id>
	  <old_state_id>3003</old_state_id>
    </change_doc_state>
  </payload>
</message>
  • No labels