В нашей компоненте реализована возможность работы по протоколу AMQP

Описание методов внешней компоненты

Данный документ содержит перечень методов внешней компоненты и описывает их использование.

В описании параметров в скобках указаны значения по умолчанию (если они есть)

Метод Connect

Предназначен для установки соединения с сервером RMQ

Параметры

  • host - адрес сервера
  • port - порт сервера (5672)
  • user - пользователь ("guest")
  • password - пароль ("guest")
  • vhost - виртуальный хост RMQ ("/")

Метод DeclareExchange

Предназначен для создания новой точки обмена на сервере RMQ.

Параметры

  • name - имя точки обмена
  • type - тип точки обмена: fanout|direct|topic
  • mustExist (false) - не создавать exchange на сервере, если его нет.
  • durable (false) - точка обмена должна кешировать сообщения на диске, на случай падения RMQ
  • auto_delete (false) - точка обмена должна быть удалена когда от нее отсоединятся все очереди

Метод выбрасывает исключение, если mustExist=true и точки с таким именем на сервере не существует.

Метод BasicPublish

Отправляет сообщение в точку обмена

Параметры

  • exchangeName - имя точки обмена
  • routingKey ("") - ключ маршрутизации сообщения (актуально только для topic и direct)
  • message - тело сообщения

Метод DeclareQueue

Создает новую очередь на сервере RMQ.

Параметры

  • name - имя объявляемой очереди. Если передать пустую строку, то метод вернет имя, сгенерированное сервером.
  • mustExist (false) - не создавать очередь с таким именем, использовать существующую.
  • durable (false) - кешировать сообщения на диске, на случай падения RMQ.
  • exclusive (false) - только текущее соединение может иметь доступ к этой очереди.
  • auto_delete (false) - удалить очередь если к ней был подключен, а затем отключен читающий клиент.

Возвращаемое значение

Строка. Имя очереди, сгенерированное сервером, или заданное явно в параметре.

Метод BindQueue

Устанавливает связь очереди и точки обмена.

Параметры

  • queue_name - имя очереди
  • exchange_name - имя точки обмена
  • routing_key ("") - ключ маршрутизации. Только сообщения с этим ключом будут попадать в очередь. Для точки обмена topic возможны маски * и #

Метод BasicConsume

Регистрирует читающего клиента (потребителя) на сервере

Параметры

  • queue_name - Имя очереди из которой будем читать.
  • consumer_tag ("") - имя потребителя. Если не задан, то имя потребителя сгенерирует сервер и вернет из метода
  • no_ack (true) - не ждать подтверждения обработки. Сообщения будут удалены из очереди сразу после отправки на клиента.
  • exclusive (false) - монопольно захватить очередь
  • prefetch_count (1) - количество сообщений единовременно отправляемых клиенту. Оптимизационный параметр, если > 1 усложняет программирование клиента.

Возвращаемое значение

Строка. Имя потребителя, сгенерированное сервером, или заданное явно в параметре.

Метод BasicConsumeMessage

Считывает сообщение из очереди. Метод блокирует текущий поток выполнения, пока не будет получено сообщение или не достигнут таймаут.

Параметры

  • consumer_tag - имя потребителя
  • [OUT] result - выходной параметр. Тело сообщения.
  • wait_timeout (-1) - таймаут ожидания сообщения в миллисекундах. -1 означает неограниченное ожидание

Возвращаемое значение

true, если сообщение получено, false, если истек таймаут.

Метод BasicAck

Отсылает серверу подтверждение, что сообщение обработано и его можно удалить.

В API жестко зашит порядок обработки сообщений. Подтвердить можно только последнее прочитанное сообщение. Таким образом, если prefetchCount больше единицы, то отправлять ack нужно по принципу LIFO (стеком).

Если сервер не получает ack, то он не будет отправлять новых сообщений, а в случае обрыва связи - вышлет неподтвержденные сообщения еще раз.

Метод DeleteQueue

Удаляет очередь с сервера

Параметры

  • queue_name - Имя очереди
  • if_unused (false) - удаление будет выполнено, только если очередь не используется
  • if_empty (false) - удаление будет выполнено, только если очередь пуста

Метод DeleteExchange

Удаляет точку обмена с сервера.

Параметры

  • name - имя точки обмена
  • if_unused (false) - удаление будет выполнено, только если точка обмена не используется.

Метод BasicReject

Отказывается от последнего полученного сообщения. Работает по принципу Ack, но в обратную сторону.

Метод BasicCancel

Отписывает потребителя от очереди.

Параметры

  • consumer_tag - имя потребителя

Метод UnbindQueue

Отсоединяет очередь от точки обмена.

Параметры

  • queue_name - имя очереди
  • exchange_name_name - имя точки обмена
  • routing_key - ключ маршрутизации, указанный при создании привязки в методе BindQueue

Метод GetLastError

Метод позволяет обойти невозможность получения текстов исключений в NativeAPI Исключение, брошенное компонентой и перехваченное в 1С не содержит текста ошибки (не предусмотрено NativeAPI).

Вызов этого метода позволяет получить текст последней известной ошибки. Значение последней ошибки обнуляется при очередном успешном вызове любого метода.

Работа со свойствами сообщений

Поддерживаются следующие имена свойств:

  • Priority
  • ReplyTo
  • CorrelationId
  • MessageId

Свойства сообщений можно читать и устанавливать перед отправкой.

Перед отправкой сообщения свойства, которые имеют статус "установленных" передаются в RabbitMQ в качестве атрибутов сообщения.

При получении сообщения все свойства "переустанавливаются" из полученного сообщения, а предыдущие значения - сбрасываются.

Пример:


client.SetProperty("CorrelationId", "corrid-12345");
Сообщить(client.GetProperty("CorrelationId")); // вернет "corrid-12345"

Текст = "";
client.BasicConsumeMessage(consumer_tag, Текст);
// после получения сообщения - все свойства перечитались из него

Сообщить(client.GetProperty("CorrelationId")); // вернет то, что было в сообщении.

Метод PropertyIsSet

Проверяет установлено ли указанное свойство.

Параметры:

  • property_name - имя свойства

Метод GetProperty

Получает значение установленного свойства

Параметры:

  • property_name - имя свойства

Метод SetProperty

Получает значение установленного свойства

Параметры:

  • property_name - имя свойства
  • value - значение свойства

Метод ClearProperties

Сбрасывает все свойства в неустановленное состояние

Вы нашли ответ?