2014-10-27 37 views
3

我有以下情形:如何知道如果Web服務已經開始

  • 有託管在JBoss Web服務。
  • Web服務由java應用程序使用。

現在一般的啓動情況是:

  • JBOSS啓動並加載Web應用程序。
  • 然後啓動該應用程序並使用該Web服務。

現在的問題:

如果Java應用程序啓動第一,有沒有什麼辦法讓它知道,Web服務已經開始了嗎?

我想到了定期對web服務進行ping操作,但是這可能會讓一些開銷變得安靜。任何解決方案都是受歡

+0

它是肥皂還是休息風格? – user1346316 2014-10-27 07:22:07

+0

只是嘗試使用它。如果它不在那裏,你會得到適當的例外。 – EJP 2014-10-27 08:34:35

+0

是休息的樣式。 – 2014-10-27 08:38:24

回答

0

定期「ping」web服務並不是一個很大的開銷。爲什麼會這樣?

稍等一會再試。一種常見的策略是增加嘗試達到最大值之間的等待時間。例如。嘗試,如果還沒有準備好,等待1秒,然後再試一次,如果還沒有準備好,請等待2秒,然後等待4秒鐘,直到最多8秒重試。

同時顯示一條消息,喜歡的用戶:

"Waiting for web service to start..." 

可選,包括嘗試迄今取得像數:

"Waiting for web service to start... (retrying #2)" 

也或者你可以做一個小的,靜態的文本文件可用作爲webapp的一部分,例如「ping.txt」,並嘗試將其作爲測試應用程序是否已準備好並可用的測試,您不必自己調用Web服務。它也可以指向Servlet,在這種情況下,您可以確保servlet容器也處於啓用狀態(當然,禁用此ping url的緩存)。

另外,如果您的webservice模塊有足夠的時間站起來,「ping」的目標可能是web服務的wsdl文檔。大多數Web服務框架提供了訪問/下載Web服務的動態生成的WSDL文檔的方法。如果該URL響應併發回動態WSDL文檔,則wsdl模塊也會啓動。

+0

謝謝。我也有同樣的感受,ping是一個簡單的解決方案,應該可以正常工作。但我仍然想知道是否有其他辦法。你知道像Web服務或其他想法的迴應。 似乎我會堅持現在ping。 – 2014-10-27 08:42:16

+0

即使有些測試表示服務已啓動,但如果在此之後繼續調用它,仍然有可能無法訪問,因此沒有更好的選擇。還添加了另一種替代方法來ping動態wsdl文檔。 – icza 2014-10-27 09:05:55

+0

它可能是也可能不是一個開銷,但它也不可靠。 ping可能成功,通話失敗。或者ping可能失敗並且調用成功。因此ping是基本沒有意義的。實際召喚的成功或失敗是重要的。 – EJP 2014-10-27 09:12:37

1

您必須時刻處理客戶端應用程序中的連接問題 - 不僅僅是啓動,因此「ping」是沒有意義的。這適用於任何類型的遠程連接解決方​​案。

當需要調用服務時調用它。如果發生故障,連接將失敗,您可以通過適當的方式通知用戶。無論您是否ping通,您都必須執行此操作,因爲服務可能會在上次ping和實際呼叫之間消失。

當客戶端處於活動狀態時,遠程服務可以上下任意次數。

+0

是的。但是,我如何定期檢查連接狀態而不ping? – 2014-10-27 09:13:03

+0

你沒有。只要嘗試在需要時使用該服務。當你不需要它時,你不關心它是否可用,當你需要它時,測試它的唯一可靠的方法就是使用它。 – EJP 2014-10-27 09:17:13

-1

您可以簡單地檢查日誌從var/log /..../ access.log 例如。tail -f /var/log/apache2/access.log