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.ЗакрытьСоединение(Соединение);
Рекомендуется всегда закрывать соединения после завершения работы для корректного освобождения ресурсов