【问题标题】:ZeroMQ Majordomo PatternZeroMQ Majordomo 模式
【发布时间】:2012-07-26 06:24:04
【问题描述】:

在 Majordomo 模式中,worker 中的一段代码如下所示

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 消息是异步返回的,所以我不能说

回复 = FIXResponse;

这是如何解决的?

【问题讨论】:

    标签: zeromq


    【解决方案1】:

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

    刚刚遇到您的其他问题之一,并且发现您有多个来源可以得到这些回复。您可以将它们全部推入一个稳定的 PULL 插座吗? (然后在适当的情况下重新发布。如果数量较少,您甚至可以摆脱长期订阅者的可靠性。)

    【讨论】:

    • 当我说它不同步时我说错了。它简单地发生在回调上。无论如何,我在这里问了 Peiter,stackoverflow.com/questions/11179061/right-zeromq-topology,他说要使用 Majordomo?
    • 其实,现在想想,它不可能是同步的,因为FIX本质上是不同步的。例如,您提交订单,FIX 引擎可能会针对该订单向您发送以下连续消息,插入、待处理、新建、部分填写等...
    • 在另一篇文章中,您并没有真正提到异步请求。我对 Majordomo 不够熟悉,无法绝对地说话,但 PUSH/PULL 应该可以工作。只要确保回调使用的是线程本地套接字。
    • Push/Pull 套接字可以有标识吗?可能有许多客户和工人(使用 Majordomo 语言),当我将订单发送到特定的交易所,并且工人返回消息时,我需要知道将这些消息发送给哪个客户。所以我需要在去工人的路上路由,我需要在返回客户端的路上路由。 Majordomo 的好处是所有这些都由我负责,中间有经纪人。我猜在您的示例中,单个 PULL 套接字将充当代理。
    猜你喜欢
    • 2019-08-29
    • 1970-01-01
    • 2013-09-11
    • 1970-01-01
    • 1970-01-01
    • 2012-01-02
    • 2017-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多