2011-06-20 46 views
5

我需要從shell腳本(從基於Linux的應用程序調用)到java應用程序傳遞信息。Java可以與System V linux消息隊列交互嗎?

命名管道很痛,因爲我無法啓動/停止任一服務而沒有考慮到管道讀/寫端的複雜後果。

套接字是艱難,因爲如果聽的過程中重新啓動有沒有排隊機制,以及簡單的實現需要新的套接字來不斷創建(否則shell腳本會得到非常複雜,檢查和重新起動插座,和排隊碼)。

我最近讀到這些System V/POSIX linux消息隊列。我正在運行Fedora 12,並想知道是否有一種很好的方法來配置這些消息隊列,與Java之間的交互。

+1

可能的重複[Java Posix IPC是否有API?](http://stackoverflow.com/questions/2278208/java-posix-ipc-is-there-an-api) – bdonlan

+0

你打算如何進行交互與他們從一個shell腳本? – Gabe

+1

寫一個簡單的C封裝器將shell腳本綁定到posix消息隊列比綁定到JNI更容易... – bdonlan

回答

1

你不能直接使用它們,你必須做一些JNI wizardry來將它們連接在一起。

您對管道有什麼問題? Java將這些視爲普通文件。我沒有廣泛使用它們,但我沒有使用Pipes的任何實際問題。如果生產者無法跟上,管道讀取器需要不斷重新打開管道的唯一細節。

但是,如果任何一方失敗,另一方只是阻止等待另一方恢復。

你只需要注意從管道讀取緩衝區。如果您從管道讀入緩衝區,然後失敗,那麼數據將丟失。

+0

我結束了對命名管道的攻擊,他們有點奇怪,因爲整個輸入/輸出流類將阻塞在構造函數上,直到管道的另一端打開,所以你必須解決這個問題,你提到,仔細監視EOF並重新打開。花了一點時間才弄清楚爲什麼要做正確的3或4個怪癖,但我認爲我現在得到了它們,看起來並不高雅,而且事情有點違反直覺。試圖讓腳本正確是另一個大問題,當另一端打開/關閉時,cat,tee和其他常見的utils非常奇怪。 –

相關問題