我有一堆不断生成文件的服务器。这些文件需要发送到一个中心位置。这些文件永远不会超过 50MB。我计划使用 ZeroMQ 来发送这些文件(封装在消息中),以便不会同时在中心位置写入文件(例如,使用 scp 进行传输会在目标上启动许多磁盘写入进程)。
我可以看到一些使用 ZeroMQ 的方法:
- 在生产者上使用 REQ 套接字,在消费者上使用单个 REP 套接字。这可能会奏效,但我认为它会使速度较慢的生产者挨饿,因为没有公平的排队。此外,如果 REP 套接字不可用,我不确定 REQ 套接字是否会丢弃消息。
- 在生产者上使用 PUSH 套接字,在消费者上使用 PULL 套接字。这对消费者有公平的排队,文档说 PUSH 套接字永远不会丢弃消息。但是,它完全可靠吗?
我的可靠性要求是:
- 消息(在我的案例文件中)不应该丢失。所以我想以这样一种方式构建它,即消费者收到的每条消息都会向生产者确认。
- 来自特定生产者的消息应该按照它们产生的顺序被接收。
- 生产者可以来来去去,他们应该抵制消费者在一段时间内不可用。
什么样的套接字适合这种应用?任何指向我应该查看哪种 zmq 模式的指针都会很棒。