簡體   English   中英

當數據寫入協議緩沖區時,如何使用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 ++的東西,並試圖讓我們的程序盡可能獨立。

那就是問題所在。 我找到了Google協議緩沖區,在程序之間傳遞數據似乎很酷但我不確定Java程序保存數據如何觸發c ++程序處理,然后當c ++程序保存結果時如何觸發Java程序保存結果(這是一個或幾個記錄,但我們計划處理數十億條記錄)。

解決這個問題的最佳方法是什么? 有一個簡單的方法嗎?

最簡單的方法可能是使用TCP套接字連接。 當您想要完成並且C ++程序發回結果時,Java程序將發送。

由於您將要擴展此解決方案,我建議使用ZMQ。

讓您的Java應用程序仍然從Hadoop中提取數據。

然后它將使用PUSH套接字將數據推出。

在這里,您將擁有所需數量的c ++工作人員,他們將處理此數據作為PULL套接字接受連接。 這可以擴展到您需要的許多不同的處理器/核心/等等。

當每個worker完成后,它會將結果推出PUSH套接字到'stored'java程序,該程序接受PULL套接字上的信息。

它看起來像這個例子 (標准的分而治之的方法)

這個過程可以根據需要擴展到盡可能多的工作人員,因為當沒有任何可用的工作程序時,您的第一個Java程序將阻止(但仍在處理)。 只要你的結束java程序很快,你會看到這個縮放真的非常好。

發射和保存程序可以在同一程序中使用zmq_poll設備:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM