Skip to the content.

Назад

Управление брокером RabbitMQ

Управление брокером RabbitMQ осуществляется при помощи соответствующего плагина управления. После его несложной установки становятся доступны web-интерфейс и Web API для создания виртуальных хостов, топиков, очередей и прочего. Плагин доступен по порту 15672.

Документация RabbitMQ Web API

Внимание! Подключение к плагину управления RabbitMQ осуществляется при помощи basic аутентификации. Для этого используется заголовок Authorization HTTP-запроса команды REQUEST. Логин и пароль должны быть закодированы при помощи BASE64 и разделяться символом двоеточия :. Например, логин и пароль guest:guest в кодировке BASE64 будут выглядеть следующим образом: Z3Vlc3Q6Z3Vlc3Q=.

Скрипт создания виртуального хоста, топика и очередей

Следующий скрипт сначала читает настройки подключения к Web API брокера RabbitMQ из информационной базы 1С:Предприятие 8. Затем по узлам плана обмена создаёт типик исходящих сообщений и выполняет привязку к нему очередей, которые затем могут быть использованы узлами 1С для получения сообщений.

DECLARE @node object
DECLARE @nodes array
DECLARE @options object
DECLARE @response object

DECLARE @vhost string = 'dajet-vhost'
DECLARE @topic string = 'dajet-topic'

USE 'mssql://server/database'

DECLARE @empty_uuid uuid = '00000000-0000-0000-0000-000000000000'
DECLARE @ЭтотУзел string = SELECT Код
                             FROM ПланОбмена.ПланОбменаРИБ
                            WHERE Предопределённый <> @empty_uuid

SELECT АдресСервера, ЛогинПароль
  INTO @options
  FROM РегистрСведений.НастройкиОбмена
 WHERE КодБрокера = 'RabbitMQ'

REQUEST '{@options.АдресСервера}/api/vhosts/{@vhost}?columns=name&disable_stats=true'
   WITH Content-Type  = 'application/json;charset=utf-8'
      , Authorization = 'Basic ' + @options.ЛогинПароль
 SELECT Method  = 'GET'
      , OnError = 'continue'
   INTO @response

REQUEST '{@options.АдресСервера}/api/vhosts/{@vhost}'
   WHEN @response.Code = '404'
   WITH Content-Type  = 'application/json;charset=utf-8'
      , Authorization = 'Basic ' + @options.ЛогинПароль
 SELECT Method  = 'PUT'
      , OnError = 'break'
      , Content = '{ "description": "DaJet Stream virtual host" }'
   INTO @response

REQUEST '{@options.АдресСервера}/api/exchanges/{@vhost}/{@topic}?columns=name&disable_stats=true'
   WITH Content-Type  = 'application/json;charset=utf-8'
      , Authorization = 'Basic ' + @options.ЛогинПароль
 SELECT Method  = 'GET'
      , OnError = 'continue'
   INTO @response

REQUEST '{@options.АдресСервера}/api/exchanges/{@vhost}/{@topic}'
   WHEN @response.Code = '404'
   WITH Content-Type  = 'application/json;charset=utf-8'
      , Authorization = 'Basic ' + @options.ЛогинПароль
 SELECT Method  = 'PUT'
      , OnError = 'break'
      , Content = '{ "type": "topic", "durable": true, "internal": false, "auto_delete": false }'
   INTO @response

SELECT route = Код,
       queue = @ЭтотУзел + '-' + Код
  INTO @nodes
  FROM ПланОбмена.ПланОбменаРИБ
 WHERE Код LIKE 'РИБ-%'
   AND ПометкаУдаления = FALSE

FOR EACH @node IN @nodes

  REQUEST '{@options.АдресСервера}/api/queues/{@vhost}/{@node.queue}?columns=name&disable_stats=true'
     WITH Content-Type  = 'application/json;charset=utf-8'
        , Authorization = 'Basic ' + @options.ЛогинПароль
   SELECT Method  = 'GET'
        , OnError = 'continue'
     INTO @response

  REQUEST '{@options.АдресСервера}/api/queues/{@vhost}/{@node.queue}'
     WHEN @response.Code = '404'
     WITH Content-Type  = 'application/json;charset=utf-8'
        , Authorization = 'Basic ' + @options.ЛогинПароль
   SELECT Method  = 'PUT'
        , OnError = 'break'
        , Content = '{ "durable": true, "auto_delete": false }'
     INTO @response

  REQUEST '{@options.АдресСервера}/api/bindings/{@vhost}/e/{@topic}/q/{@node.queue}?columns=destination'
     WITH Content-Type  = 'application/json;charset=utf-8'
        , Authorization = 'Basic ' + @options.ЛогинПароль
   SELECT Method  = 'GET'
        , OnError = 'continue'
     INTO @response

  REQUEST '{@options.АдресСервера}/api/bindings/{@vhost}/e/{@topic}/q/{@node.queue}'
     WHEN @response.Code = '200' AND @response.Value[destination=@node.queue].destination = ''
     WITH Content-Type  = 'application/json;charset=utf-8'
        , Authorization = 'Basic ' + @options.ЛогинПароль
   SELECT Method  = 'POST'
        , OnError = 'break'
        , Content = '{ "routing_key": "' + @node.route + '" }'
     INTO @response

END -- FOR

END -- Контекст базы данных

Наверх

Скрипт удаления виртуального хоста и всего его содержимого

Скрипт полезен для очистки того, что было создано предыдущим скриптом. Сочетание этих двух скриптов очень помогает в развёртывании тестовых контуров с последующим их удалением.

DECLARE @options object
DECLARE @response object

DECLARE @vhost string = 'dajet-vhost'

USE 'mssql://server/database'

DECLARE @empty_uuid uuid = '00000000-0000-0000-0000-000000000000'
DECLARE @ЭтотУзел string = SELECT Код
                             FROM ПланОбмена.ПланОбменаРИБ
                            WHERE Предопределённый <> @empty_uuid

SELECT АдресСервера, ЛогинПароль
  INTO @options
  FROM РегистрСведений.НастройкиОбмена
 WHERE КодБрокера = 'RabbitMQ'

REQUEST '{@options.АдресСервера}/api/vhosts/{@vhost}?columns=name&disable_stats=true'
   WITH Content-Type  = 'application/json;charset=utf-8'
      , Authorization = 'Basic ' + @options.ЛогинПароль
 SELECT Method = 'GET'
   INTO @response

REQUEST '{@options.АдресСервера}/api/vhosts/{@vhost}'
   WHEN @response.Code = '200'
   WITH Content-Type  = 'application/json;charset=utf-8'
      , Authorization = 'Basic ' + @options.ЛогинПароль
 SELECT Method = 'DELETE'
   INTO @response

END -- Контекст базы данных

Наверх