跨系统使用ZMQ订阅模式进行消息传输,压测发现会有千分之一的概率SUB端丢失消息,需要修改以下参数进行优化,SUB和PUB端都需要修改
-
ZMQ_RECBUF 用于设置和获取 ZeroMQ 套接字的接收缓冲区大小。
-
ZMQ_SNDBUF 用于设置和获取 ZeroMQ 套接字的发送缓冲区大小。
-
ZMQ_RCVHWM 用于设置和获取 ZeroMQ 套接字的接收高水位标记。当消息队列中未接收的消息数量达到 RCVHWM 值时,后续的消息将被丢弃或阻塞发送端(取决于套接字类型)。
-
ZMQ_SNDHWM 用于设置和获取 ZeroMQ 套接字的发送高水位标记。当消息队列中未发送的消息数量达到 SNDHWM 值时,后续的消息将被丢弃或阻塞发送端(取决于套接字类型)。
// 创建 ZeroMQ 套接字 void* socket = zmq_socket(context, ZMQ_PULL); // 设置接收缓冲区大小为 1000000 字节 int recvBufSize = 1000000; zmq_setsockopt(socket, ZMQ_RECBUF, &recvBufSize, sizeof(recvBufSize)); // 设置发送缓冲区大小为 2000000 字节 int sendBufSize = 2000000; zmq_setsockopt(socket, ZMQ_SNDBUF, &sendBufSize, sizeof(sendBufSize)); // 设置接收高水位标记为 1000 int recvHWM = 1000; zmq_setsockopt(socket, ZMQ_RCVHWM, &recvHWM, sizeof(recvHWM)); // 设置发送高水位标记为 2000 int sendHWM = 2000; zmq_setsockopt(socket, ZMQ_SNDHWM, &sendHWM, sizeof(sendHWM)); // 关闭 ZeroMQ 套接字 zmq_close(socket);