我正在使用 ZeroMQ 的 C# 包装器,但这似乎更像是 ZeroMQ 的一个潜在问题。
有什么方法可以在不阻塞和不排队的情况下推送消息?如果服务器未启动,我希望将消息永久处理而不会阻塞。
以下是我到目前为止尝试过的设置:
1)
发送(阻止发送)
高水位线 = 0
这(奇怪地)并没有阻塞,但它似乎在内存中排队,直到套接字连接(内存不断增加进程)。
2)
发送(非阻塞发送)
高水位线 = 1
这是一个竞争条件。如果我快速连续发送两条消息,则有时会因为超过高水位线而丢弃一条消息。
3)
轮询套接字以确定它是否会阻塞。这并没有真正帮助,因为我仍然必须在队列开始阻塞之前将一条(旧)消息放入队列中(如果我设置 HWM = 1)。
具有任何高水位标记的非阻塞发送是不可取的,因为一旦服务器恢复联机,它就会从客户端收到一堆旧消息。
阻止发送不起作用,因为我不想阻止。