Skip to main content

ZeroMQ

1C/OS ModuleOPI_ZeroMQ#Useoint/api/zeromq

This section is dedicated to the library for working with ZeroMQ in 1C:Enterprise and OneScript. This page describes all the actions necessary to get started

An external component is used to implement some functions in this library
Please review the "About external components" section before getting started

Getting Started

ZeroMQ is a high-performance asynchronous messaging library that provides sockets operating over various transports (TCP, IPC, in-process). The library supports several messaging patterns.

Messaging Patterns

The library supports the following ZeroMQ patterns:

1. Request-Reply (REQ/REP)

Synchronous request-reply pattern. The client sends a request and waits for a response from the server.

Client:

Address = "tcp://localhost:5555";
Connection = OPI_ZeroMQ.CreateConnectionReq(Address);

Data = GetBinaryDataFromString("Hello, server!");
Result = OPI_ZeroMQ.ProcessRequest(Connection, Data, 5000, 5000);

Server:

Port = 5555;
Connection = OPI_ZeroMQ.OpenPortRep(Port);

Result = OPI_ZeroMQ.GetData(Connection, -1);
Response = GetBinaryDataFromString("Server response");
OPI_ZeroMQ.SendData(Connection, Response);

2. Publish-Subscribe (PUB/SUB)

Publish-subscribe pattern. The publisher sends messages to all subscribers on specific topics.

Publisher:

Port = 5556;
Connection = OPI_ZeroMQ.OpenPortPub(Port);

Data = GetBinaryDataFromString("topic1:Message on topic 1");
OPI_ZeroMQ.SendData(Connection, Data);

Subscriber:

Address = "tcp://localhost:5556";
Connection = OPI_ZeroMQ.CreateConnectionSub(Address);

// Subscribe to topic
OPI_ZeroMQ.Subscribe(Connection, "topic1");

// Receive messages
Result = OPI_ZeroMQ.GetData(Connection, -1);

3. Pipeline (PUSH/PULL)

Pipeline processing pattern. Tasks are distributed among workers.

Task sender:

Address = "tcp://localhost:5557";
Connection = OPI_ZeroMQ.CreateConnectionPush(Address);

Data = GetBinaryDataFromString("Task for processing");
OPI_ZeroMQ.SendData(Connection, Data);

Task worker:

Port = 5557;
Connection = OPI_ZeroMQ.OpenPortPull(Port);

Result = OPI_ZeroMQ.GetData(Connection, -1);
// Process received task

Working with Timeouts

All data sending and receiving methods support timeouts (in milliseconds):

  • -1 or Undefined — wait without timeout (blocking mode)
  • 0 — non-blocking mode (immediate return)
  • > 0 — wait for the specified number of milliseconds
// Wait without timeout
Result = OPI_ZeroMQ.GetData(Connection, -1);

// Non-blocking receive
Result = OPI_ZeroMQ.GetData(Connection, 0);

// Wait 5 seconds
Result = OPI_ZeroMQ.GetData(Connection, 5000);

Closing Connections

After completing work, connections must be closed:

OPI_ZeroMQ.CloseConnection(Connection);
important

It is recommended to always close connections after completing work for proper resource release