Перейти к основному содержимому

ZeroMQ

Модуль 1С/OSOPI_ZeroMQ#Использоватьoint/api/zeromq

Этот раздел посвящен библиотеке для работы с ZeroMQ в 1С:Предприятие и OneScript. На данной странице описаны все действия, необходимые для полноценного начала работы

Начало работы

ZeroMQ — это высокопроизводительная библиотека асинхронного обмена сообщениями, которая предоставляет сокеты, работающие поверх различных транспортов (TCP, IPC, in-process). Библиотека поддерживает несколько паттернов обмена сообщениями.

Паттерны обмена сообщениями

Библиотека поддерживает следующие паттерны работы с ZeroMQ:

1. Request-Reply (REQ/REP)

Паттерн синхронного запрос-ответ. Клиент отправляет запрос и ожидает ответ от сервера.

Клиент:

Адрес = "tcp://localhost:5555";
Соединение = OPI_ZeroMQ.СоздатьСоединениеReq(Адрес);

Данные = ПолучитьДвоичныеДанныеИзСтроки("Привет, сервер!");
Результат = OPI_ZeroMQ.ОбработатьЗапрос(Соединение, Данные, 5000, 5000);

Сервер:

Порт = 5555;
Соединение = OPI_ZeroMQ.ОткрытьПортRep(Порт);

Результат = OPI_ZeroMQ.ПолучитьДанные(Соединение, -1);
Ответ = ПолучитьДвоичныеДанныеИзСтроки("Ответ сервера");
OPI_ZeroMQ.ОтправитьДанные(Соединение, Ответ);

2. Publish-Subscribe (PUB/SUB)

Паттерн публикации-подписки. Издатель рассылает сообщения всем подписчикам по определенным темам.

Издатель:

Порт = 5556;
Соединение = OPI_ZeroMQ.ОткрытьПортPub(Порт);

Данные = ПолучитьДвоичныеДанныеИзСтроки("topic1:Сообщение по теме 1");
OPI_ZeroMQ.ОтправитьДанные(Соединение, Данные);

Подписчик:

Адрес = "tcp://localhost:5556";
Соединение = OPI_ZeroMQ.СоздатьСоединениеSub(Адрес);

// Подписка на тему
OPI_ZeroMQ.Подписаться(Соединение, "topic1");

// Получение сообщений
Результат = OPI_ZeroMQ.ПолучитьДанные(Соединение, -1);

3. Pipeline (PUSH/PULL)

Паттерн конвейерной обработки. Задачи распределяются между обработчиками.

Отправитель задач:

Адрес = "tcp://localhost:5557";
Соединение = OPI_ZeroMQ.СоздатьСоединениеPush(Адрес);

Данные = ПолучитьДвоичныеДанныеИзСтроки("Задача для обработки");
OPI_ZeroMQ.ОтправитьДанные(Соединение, Данные);

Обработчик задач:

Порт = 5557;
Соединение = OPI_ZeroMQ.ОткрытьПортPull(Порт);

Результат = OPI_ZeroMQ.ПолучитьДанные(Соединение, -1);
// Обработка полученной задачи

Работа с таймаутами

Все методы отправки и получения данных поддерживают таймауты (в миллисекундах):

  • -1 или Неопределено — ожидание без таймаута (блокирующий режим)
  • 0 — неблокирующий режим (немедленный возврат)
  • > 0 — ожидание указанное количество миллисекунд
// Ожидание без таймаута
Результат = OPI_ZeroMQ.ПолучитьДанные(Соединение, -1);

// Неблокирующее получение
Результат = OPI_ZeroMQ.ПолучитьДанные(Соединение, 0);

// Ожидание 5 секунд
Результат = OPI_ZeroMQ.ПолучитьДанные(Соединение, 5000);

Закрытие соединений

После завершения работы необходимо закрывать соединения:

OPI_ZeroMQ.ЗакрытьСоединение(Соединение);
important

Рекомендуется всегда закрывать соединения после завершения работы для корректного освобождения ресурсов