ZeroMQ Majordomo模式

3
在Majordomo模式中,工作线程中的一段代码如下所示。
mdwrk session ("tcp://localhost:5555", sourceStr.c_str(), verbose);

zmsg *reply = 0;
while (1) {
    zmsg *request = session.recv (reply);
    if (request == 0) {
        break;              //  Worker was interrupted
    }

    //reply = request;        //  Echo is complex... :-)
    reply = new zmsg(sourceStr.c_str());
}

对于我的工作人员来说,客户的请求是要发送到交易所的订单。我正在努力理解,在我将订单发送到交易所之后,当我收到像“插入”、“待定”、“新建”等消息时,如何将FIX响应内容放入zmsg *reply中。
由于FIX消息是异步返回的,因此我不能简单地写下:reply = FIXResponse;
那么如何解决这个问题呢?
1个回答

0

我认为Majordomo协议是用来处理同步请求的,不太适合这里。

刚刚看到你的另一个问题,并且发现你有多个来源来回复。你可以将它们全部PUSH到一个稳定的PULL套接字中吗?(然后如果需要的话再重新发布。如果数量很少,你甚至可以使用可靠的持久订阅者来保证可靠性。)


当我说它不是同步的时候,我说错了。它只是在回调上发生。无论如何,我在这里问Peiter,https://dev59.com/8WXWa4cB1Zd3GeqPL1jx,他说要使用Majordomo? - Ivan
其实,现在我想想,它不能是同步的,因为FIX本质上不是同步的。例如,您提交一个订单,FIX引擎可能会为该订单发送以下连续消息:插入、挂起、新建、部分成交等等... - Ivan
在你之前的那篇帖子中,你并没有真正提到异步请求。我对Majordomo不够熟悉,无法绝对确定,但PUSH/PULL应该可以工作。只需确保回调使用线程本地套接字即可。 - eevar
推/拉套接字可以有身份吗?可以有许多客户端和工作人员(使用Majordomo语言),当我向特定的交易所发送订单并从工作人员那里收到消息时,我需要知道将这些消息发送给哪个客户端。因此,我需要在发送到工作人员的路上进行路由,并且在返回客户端的路上进行路由。Majordomo的好处是,在中间有一个代理来处理所有这些事情。我想你的例子中单个PULL套接字将充当代理。 - Ivan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接