2010-07-21 32 views
3

我需要從我的應用程序管理代理池。所有這些都是用Java編寫的,但代理需要在他們自己的JVM中運行。我寫了一個啓動子進程的概念證明,並使用stdout/stdin發送命令和保持活動信息。我還打開一個用於數據傳輸的套接字連接。管理JVM代理池和通信

我想有些連接池庫應該能夠幫助管理代理。

代理商與主流程之間的溝通如何?使用帶有XML消息的TCP(JAXB)並不像我想的那樣可靠或方便。任何建議更好的圖書館在這裏協助?

我可以很好地寫出自己需要的東西,但我確信其他人已經做得更好了。

回答

1

對於消息可以嘗試像ZeroMQ,它是一個通訊工具和具有本地傳輸進程之間communicationg ,那麼你可以在進程之間序列化對象。

另一種方法是回到傳統的rmi,可能是最簡單的。

+0

此外,根據環境(在許多企業環境中已經設置),通用的JMS或Tibco RV可能是一個選項。 – ddimitrov 2010-08-04 15:00:49

+0

我接受zeromq作爲答案,即使我無法使用它(我需要一個完整的java堆棧來實現可移植性)。事實上,ZeroMQ真的很酷。我仍然必須實現我自己的序列化機制...... – 2012-06-12 09:52:26

0

其實我已經發現了兩個辦法,將有很大的幫助,當我開發了這個:

  1. 的WebSockets。我使用了簡單的socket,但是我需要重新發送信號來檢查發送和發送的東西。我使用了基於行的方法,但它確實很難看。 WebSockets提供基於消息的通信,這很好。
  2. Hazelcast。這是一個「分佈式系統」,並提供諸如分佈式執行程序之類的優秀功能(我計劃在應用程序服務器中發送消息並讓任何可用的jvm代理以原子方式處理它),共享的和線程安全的hashmaps(要保留跟蹤誰在運行)等等。我見過的許多類似工具都是使用本機代碼(比如ZeroMQ btw)或者使用per-CPU許可證等。 Hazelcast是社區版,可以捆綁到我的應用程序中。

實際上,我已經開始使用vert.x來處理基於websocket的通信,並意識到它本身使用了hazelcast。