C/C++远程消息队列的建议

Ran*_*ook 11 c c++ unix linux message-queue

我正在开发一个涉及多个C++程序的项目,每个程序都接受输入并生成输出.数据(数十到数百个字节,可能是JSON)基本上(一个方向)流动(异步),并且程序需要位于LAN周围的不同Linux计算机上.

由于数据只在一个方向流动,我不相信我需要像HTTP那样的事务模型.我认为消息队列模型(fire and forget)最有意义,应该简化每个程序的逻辑.仅注意消息已成功添加到远程队列可能就足够了.

我正在寻找的是如何在C或C++中实现此消息队列的建议.似乎POSIXBoost消息队列仅限于单个主机,而RabbitMQ似乎具有较弱的C/C++支持,并且MQ4CPP似乎对业务关键角色的支持不足.我错了吗?那么Boost ASIOACE或自己编写套接字代码怎么样?我期待着你的建议.

use*_*116 11

在简单的消息传递支持方面,ZeroMQ很难被击败.它可用于许多语言绑定,并支持从简单的发送和接收到发布/订阅,扇出甚至消息传递管道的所有内容.代码也很容易消化,并且可以很容易地在模式之间切换.

查看他们的Weather Update Server示例(20种奇怪的语言)显示创建发布/订阅设置是多么容易:

zmq::context_t context (1);
zmq::socket_t publisher (context, ZMQ_PUB);
publisher.bind("tcp://*:5556");
publisher.bind("ipc://weather.ipc");

while(1) {
    //  Send message to all subscribers
    zmq::message_t message(20);
    snprintf ((char *) message.data(), 20 ,
        "%05d %d %d", zipcode, temperature, relhumidity);
    publisher.send(message);
}
Run Code Online (Sandbox Code Playgroud)

我已经在一些混合的C#和Python进程中使用它而没有太多麻烦.