“服务器”到“服务器”ZeroMQ通信

我想构建一个具有以下架构的系统:

+------------------+ +------------------+ | App1. 0mq client |  | App2. 0mq server | +------------------+ +------------------+ 

哪里
App2是一个ZeroMQ服务器,它是一个黑盒子,

App1是一个ZeroMQ客户端,但它实际上是一个前端服务器。 前端服务器将处理来自客户端的一些请求,然后将与App2服务器通信。

鉴于:

  1. 在任何时间点,任何“服务器”都可以关闭或重新启动。
  2. 我想启动任何应用程序,即使其他应用程序没有运行。
  3. 如果在App2关闭时启动App1 ,我想知道App2何时启动。

是否可以实现3.仅使用ZeroMQ内置 ,或者我是否需要使用不同的机制来通知App1 App2已启动

Item 3 :使用纯ZeroMQ内置插件

Fig.1:为什么使用天真的REQ/REP是错误的

  XTRN_RISK_OF_FSA_DEADLOCKED ~ { NETWORK_LoS : || NETWORK_LoM : || SIG_KILL( App2 ) : || ... : } : [App1] ![ZeroMQ] : [ZeroMQ] ![App2] code-control! code-control : [code-control ! code-control +===========!=======================+ : +=====================!===========+ | ! ZMQ | : | ZMQ ! | | ! REQ-FSA | : | REP-FSA! | | !+------+BUF> .connect()| v |.bind() +BUF>------+! | | !|W2S |___|>tcp:>---------[*]-----(tcp:)--|___|W2R |! | | .send()>-o--->|___| | | |___|-o---->.recv() | | ___/ !| ^ | |___| | | |___| ^ | |! \___ | | REQ !| | v |___| | | |___| | v |! REP | | \___.recv()<----o-|___| | | |___|<---o-<.send()___/ | | !| W2R|___| | | |___| W2S|! | | !+------ 

Fig.2:如何使用纯ZeroMQ内置实现需求Item 3

App1.PULL.recv( ZMQ.NOBLOCK )App1.PULL.poll( 0 )很明显

 [App1] ![ZeroMQ] code-control! code-control +===========!=======================+ | ! | | !+----------+ | | .poll()| W2R ___|.bind() | | ____.recv()<----o-|___|-(tcp:)--------O | PULL !| |___| | : | !| |___| | : | !| |___| | : | !+------ 

虽然我不是专家,但我曾经实施过类似的平台。

来自App2 -> App1的附加信令层( REQ/REP )可以做到这一点。

每次App2线时,都应该将一个msg传递给App1

App1的单独线程可以随时从App2接收此msg