ZMQ套接字队列



我是ZMQ的新手,我正在使用NodeJS绑定。我有一个使用PUSH/PULL套接字的应用程序。一方面,我将PUSH数据发送到一些节点,这些节点通过PULL套接字接收并处理它。有时我不得不杀死应用程序的一个或多个节点,而这些节点在PULL套接字中可能还有一些数据要处理。我不想丢失这些数据,所以我想知道是否有一种方法可以访问ZMQ的PULL套接字队列,以检查是否还有消息要处理。

事实上,我在ZMQ和NodeJS绑定的规范中找不到任何东西,所以也许我把整个概念搞错了。

如果终止进程,则该进程缓冲区中的任何数据都将丢失。

与其强行终止进程,您应该始终找到一种方法,允许进程优雅地关闭。在这里,您可以向PULL套接字发送一条"KILL"消息;进程可以读取该消息,并在收到该消息时退出。如果您可以刷新套接字缓冲区(取决于是否还有其他进程仍在向其发送),则可以执行此操作,然后在没有更多消息可读取时退出。

我正在发布我找到的解决方案。这并不是一个真正的解决方案,因为我没有使用ZMQ套接字来检查队列中是否没有更多的消息,这只是我脑海中出现的一个变通方法/破解方法,以使事情正常工作。我没有时间自己写队列处理,所以下面是我解决问题的方法:

每当进程接收到要处理的消息时,它们都会通过new Date().getTime()存储时间戳。每当一个进程需要终止时,就会向它发送一条kill消息。当进程收到消息时,它会用setInterval开始超时。每x秒(我输入10,可以或多或少),超时就会触发一个函数,检查最后一条收到的消息是否足够旧(使用时间戳,用保存的最后一条减去这个ts,如果结果大于y,在我的情况下是100秒,它就足够旧了)。如果是,则意味着没有收到更多的消息(队列中没有更多的消息),因此它会终止进程,否则什么也不做。

最新更新