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

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 4 Next »

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

Для интеграции с внешними сервисами можно использовать бизнес-хуки – сообщения, добавляемые в очередь 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_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>
  • No labels