ZeroMQ - 4.x和&之间的向后兼容性2.2使用LogStash

时间:2014-05-13 19:31:15

标签: c zeromq

我有一个带有ZeroMQ输入插件的logstash服务器设置,用于从我编写的简单应用程序中收集数据。当我在具有相同ZeroMQ安装(Ubuntu,apt-get install libzmq1)的系统上运行应用程序时,它可以很好地工作。

但是,在我们的实际系统中,我们使用ZeroMQ 4.0.1,并且logstash报告数据有效负载为空。我已经添加了尽可能多的调试,我开始认为它是一个简单的版本不兼容(尽管ZeroMQ说这应该工作)。我用来测试的应用程序是微不足道的:

//  Prepare our context and socket
zmq::context_t context (1);
zmq::socket_t socket (context, ZMQ_PUB);

socket.connect ("tcp://logstash:2120");

for (int request_nbr = 0; request_nbr != 10; request_nbr++) {
    dataList["number"] = boost::lexical_cast<std::string>(request_nbr);

    std::string log = map2json(dataList);
    zmq::message_t request (log.size());
    memcpy ((void *) request.data (), log.c_str(), log.size());
    std::cout << "Sending msg " << request_nbr << "…" << std::endl;
    socket.send (request);
    sleep(1);
}

当应用程序再次链接到ZMQ2.2(来自libzmq1)时,这非常有效,但是当我将应用程序与我的ZeroMQ 4.0.1安装(从源代码构建)链接时,logstash会因json解析错误而失败(说明有效载荷为空)。

更新

我在Logstash服务器上从源安装了ZeroMQ 3.2.4,现在它可以工作了。

2 个答案:

答案 0 :(得分:1)

Pubsub过滤从2.x反转到3.x,如果您尝试使用主题潜艇,则不起作用。

我发了一个问题,请参阅乔丹对以下主题的回应。

https://groups.google.com/forum/m/#!msg/logstash-users/Tx_J7eCFUNI/pS3qkTRCFDIJ

答案 1 :(得分:1)

我认为这是ZeroMQ 2.2的LogStash利用率中的一个错误,或者至少是2.2和4.0之间的不兼容性。

我在服务器上安装了ZeroMQ 3.2.4(从源代码构建),现在我的4.x客户端能够将日志发布到我的Logstash服务器。