我需要在兩個不同的JAVA程序之間具有遠程方法調用(RMI)功能。兩者都應該按順序在給定文件(文件名作爲參數)上執行一些後端功能。由於要處理的文件數量可能過大,因此我要求遠程調用異步完成。最初我使用Java RMI來完成這個任務,因爲它完全適合,除了調用是同步完成的。這些都是簡單的java程序,我不想將它們部署在任何應用程序服務器上,因爲這會造成太大的開銷。同時需要同時執行多個文件,因此程序是在線程安全模式下開發的。請爲此提出理想的實施方案。任何自定義開發的API如果免費提供將非常有幫助。JAVA異步RMI
1
A
回答
1
最簡單的解決方案是讓你的RMI調用啓動一個異步任務。如果你想提高效率,你可以發送批量的文件進行處理。注意:除非您小心,否則磁盤子系統可能是您的瓶頸,並且使用多個線程可能會更慢而不是更快。
0
如果您確定您的應用程序都在Java中(並且將會),那麼您應該使用JMS(Java消息傳遞服務)。異步通信也將成爲第三方代理 - 消息隊列(ActiveMQ或直接嵌入在Glassfish或其他應用服務器中的應用服務器)。
通過使用此功能,您可以發送MQ並將消息發送到其他應用程序。
如果你想要更多的靈活性,也許一些應用程序正在(或將要)以另一種語言編寫,你應該使用AMQP而不是JMS。
3
我需要兩個不同的JAVA程序之間的遠程方法調用(RMI)功能......我要求遠程調用異步完成。
這兩個要求是相互矛盾的。 RMI意味着遠程方法調用,這意味着調用和返回方法調用語義。如果它不是調用和返回的,它不是方法調用,所以它也不是RMI。
您應該研究具有聽衆的技術,例如JMS。
-1
只需旋轉一個線程並從線程中調用方法即可。現在你有異步RMI ;-)
2
擁有真正的異步調用的方法是:
- 與NIO實現RMI。
- 當代理被調用時,將請求放在NIO選擇器上,並立即返回結果未來給調用者。
- 每個請求都必須有一個唯一的請求ID,並且當具有該ID的響應從服務器到達時,應該解決正確的未來。
只有一個實現,我知道這樣的async RMI
這裏是一個很好explanation有關它是如何實際執行序列圖。
0
相關問題
- 1. 異步Java RMI
- 2. Spring異步RMI調用
- 3. Java RMI方法同步
- 4. 在jmeter中獲取java rmi異常
- 5. java rmi服務器端異常處理
- 6. Java RMI連接拒絕主機異常
- 7. 異步編程JAVA
- 8. Java:異步MongoTemplate/MongoOperation
- 9. Java異步問題
- 10. Java異步處理
- 11. Java RMI NoSuchObjectException
- 12. java rmi例外
- 13. java RMI和eclipse
- 14. Java RMI ServerException - java.lang.ClassNotFoundException:org.prog.rmi.RmiServer_Stub
- 15. 運行Java RMI
- 16. spring rmi java 1.4和java 1.5
- 17. Java CDI @ApplicationScoped同步/異步訪問
- 18. 異步異步
- 19. Java RMI ClassNotFound例外
- 20. Java RMI,Tomcat問題!
- 21. Java RMI的概念
- 22. 的Java RMI調用
- 23. Java RMI導致「NoSuchObjectException」
- 24. 雙向異步Java RPC
- 25. 異步從Java調用Python
- 26. Java中的異步解析
- 27. java中的異步UI
- 28. Java的異步編程
- 29. Java中的異步IO?
- 30. Java Servlet異步支持
這實際上並不正確。異步方法調用通常使用回調函數或其他形式的continuation來處理它們的返回值。它們通常不會像異步消息發送一樣「忘卻」,它們也不會像演員系統中的消息發送那樣,因此您需要明確地偵聽響應。 – 2016-12-22 12:51:03
@BarryKelly當然,但問題是關於Java RMI,它沒有這樣的功能。 – EJP 2016-12-22 22:55:21