簡體   English   中英

如何構建單一訪問Web服務?

[英]How do I build a single access web service?

我在Weblogic上有一個Jax-RS Jersey Web服務。 它運行正常,但返回大量數據。 問題是,如果我同時用完服務器上的所有JVM內存,並且有四個以上的服務調用,那么一切都會停止工作,而我必須重新啟動。

如何將服務限制為僅運行2個或3個實例,並讓其他呼叫等待?

您如何返回數據? 您是否創建了整個對象以返回到內存中? 如果是這樣,那么您可能想研究流式傳輸響應。

您能告訴我們您的服務在做什么嗎?

編輯:
您可以像這樣流式傳輸內容(例如ResultSet數據);

@GET
public MyResultStream getData()
{
  ResultSet rs = queryDatabase();
  return new MyResultStream(rs);
}

您需要自己提供MyResultStream;

public class MyResultStream implements javax.ws.rs.core.StreamingOutput
{
  private ResultSet rs;

  public MyResultStream (ResultSet rs)
  {
    this.rs = rs;
  }

  public void write(OutputStream output)
  {
    //write any document pre-able
    // for example <results>

    while (rs.next())
    {
      //get the data from the ResultSet and write it to the output in XML form
      // for example <result><foo>bar</foo></result>
    }

    //write any document post-amble
    // for example </results>
  }
}

請記住,您必須以某種方式關閉ResultSet

如果僅用三個或四個請求就使JVM崩潰,那么我可能會開始研究完成的體系結構。 正如Qwerky所述,您是否正在創建要返回的所有對象? 那些物體重嗎? 您可以使用較輕的對象來返回數據嗎? 您是否必須一次返回所有數據? 您可能返回多少(記錄/對象數)數據? 大小(以KB,MB等為單位)? 服務器是否有足夠的內存? 服務器的最小和最大內存是否在啟動時設置為有助於其更好性能的值? 有泄漏嗎? 我在堆上創建太多對象的速度太快了嗎?

待定,它本身與應用程序本身無關,集群和負載平衡(分散請求)又如何呢?

另外...取決於您返回的數據量...有時Web服務不是一件好事。 在我的公司中,有一個案例,我們試圖開發一個Web服務,該服務需要處理大約3萬行數據回送。 它只是要處理很多。 實際上,我們最終將該過程變成了批處理過程。 然后,該過程的結果被我們的Web UI和Web服務使用。 由於用戶直到第二天才需要數據,因此這使得管理數據處理變得更加容易。

只是一些不同的想法可以幫助您以不同的角度去追求這一目標。

暫無
暫無

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

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