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>

Если 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Значение доп. параметра
    MESSAGE_TYPE_AutoTopUpPaymentРезультат проведения автоплатежа. Добавлено в 6.2.0.28account_idИдентификатор лицевого счета
    request_state_idСтатус проведения автоплатежа
    refuse_reason_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>
  • No labels