当数据被写入协议缓冲区时,我如何让Java触发C++程序,反之亦然
How can I have Java trigger C++ programs and vice versa when data is written to protocol buffers?
长话短说,我有一个Java进程,它可以向进程读取数据,也可以向进程写入数据。我有一个C++程序,它获取数据,进行处理,然后需要将其传递回Java,以便Java可以将其写入数据库。
Java程序从Hadoop中提取数据,因此一旦Hadoop进程启动,它就会被数据淹没,但实际的处理(由C++程序完成)无法同时处理所有数据。所以我也需要一种控制流量的方法。同样为了使问题复杂化(但简化我的工作),我做Java的东西,我的朋友做C++的东西,并试图保持我们的程序尽可能独立。
这就是问题所在。我找到了谷歌协议缓冲区,在程序之间传递数据似乎很酷,但我不确定Java程序保存数据如何触发c++程序进行处理,然后当c++程序保存结果时,Java程序将如何触发以保存结果(这是针对一条或几条记录的,但我们计划处理数十亿条记录)。
解决这个问题的最佳方法是什么?有简单的方法吗?
最简单的方法可能是使用TCP套接字连接。Java程序会在您想要完成的时候发送,C++程序会发回结果。
由于您想要扩展此解决方案,我建议使用ZMQ。
让你的java应用程序仍然从Hadoop中提取数据。
然后,它将使用push套接字依次推出数据。
在这里,您将有尽可能多的c++工作人员,他们将处理作为PULL套接字接受连接的数据。这可以扩展到尽可能多的不同处理器/内核等。。。你需要的。
当每个工作程序完成时,它会将push套接字上的结果推送到"存储"java程序,该程序正在接受PULL套接字上的信息。
它看起来有点像这个例子(标准的分而治之方法)
当没有可用的工作者时,这个过程可以扩展到第一个java程序将阻止(但仍在处理)的工作者数量。只要你的java程序结束得很快,你就会看到它的伸缩性非常好。
发射和保存程序可以在同一程序中,只需使用zmq_poll设备:)
- 在java中解决这段代码时面临循环中的问题
- 无法删除指针,已触发断点
- 尝试用java代码编译和运行c++代码
- 条件断点在不应该触发时触发
- 在这种情况下,java对象是否可以调用本机函数
- WM_CTLCOLORSTATIC从未在WIN32应用程序中触发
- 在java中读取c++字节的位字段
- 在条件变量中触发错误信号的频率是多少
- 为什么C++对链表中的下一个节点使用指针,而像 C# 或 Java 这样的语言只使用类 Node 的名称?
- 当服务中的事件被触发时,如何将响应从服务发送回客户端?
- 使用已使用 java 编码的 openssl 解码数据
- SWIG Java 在使用 -DSWIGWORDSIZE64 时将int64_t转换为 jlong
- 触发时无法将 QAction 链接到函数 (Qt 5)
- Android Java USB for native cpp
- 在由Sublime文本3编译后在cmd上显示Java程序输出
- C++ equivalent to Java Map getOrDefault?
- C++ 中的 Java 样式枚举
- 是否有技术原因阻止 Java 中的 final C++ 像 const 一样严格?
- 触发Java Jar用C 运行并传递字符串
- 当数据被写入协议缓冲区时,我如何让Java触发C++程序,反之亦然