簡體   English   中英

從Servlet啟動獨立應用程序上的線程

[英]Start thread on standalone application from Servlet

我有一個Web應用程序(JSP / Servlets),我需要從中調用Web服務來獲取響應。 由於Web服務需要大約4到5分鍾才能發送響應,因此應用程序正在凍結,不允許用戶在應用程序上執行任何操作。

要解決此問題,我需要將Web服務調用委派給外部獨立應用程序的線程,以便Web服務調用變為異步。 有了這個,我有幾個問題:

  1. 從帶有參數的servlet調用主程序的最佳方法是什么? 我正在考慮使用Runtime對象的exec()方法來調用.bat文件。 有什么比這更好的?

  2. 我想在每個請求的主程序上啟動一個線程。 但是為每個請求調用主程序將每次啟動JVM(可能是昂貴的資源)。 是否可以檢查主線程是否正在運行?如果是,則在同一主線程上啟動新線程,而不是再次調用主程序。

有誰能請讓我知道什么是最好和非昂貴的方式來處理這個?

提前致謝。

從帶有參數的servlet調用主程序的最佳方法是什么? 我正在考慮使用Runtime對象的exec()方法來調用.bat文件。 有什么比這更好的?

而不是IMO,您可以在Web應用程序中創建一個線程類,並在其中並行執行webservice調用

此外,如果您使用的是Servlet3 API,那么API規范引入的新Async支持可能會有所幫助

擁有一個隊列或更好的消息,讓MessageBroker在您的Web應用程序本身中提交Web服務調用請求,並向用戶返回唯一的ID。

有一個線程來監視上面提到的Queue或MessageBroker並使項目出列並產生線程,這些線程將調用Web服務並等待其響應,然后將其放入另一個Queue或MessageBroker或狀態為complete的同一個。

為用戶提供UI以輸入唯一ID並檢索Web服務調用的結果。

這樣您就不必創建進程並可以使用Threads管理所有內容。 創建進程非常耗時,並且您的創建進程的設計可能會被黑客利用來減慢您的服務器速度或者更糟糕的崩潰,通過循環發送請求。

暫無
暫無

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

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