2017-05-19 78 views
-1

我必須實現並行進程才能同時調用4個微服務調用。我在哪裏有16個輸入,其中每個微服務需要消耗4個進程。如何在Java中調用REST端點的並行處理/多線程處理

for (int i = 0; i < 16; i++) { 
    if (m == i) { 
     LOGGER.info("Inside If condition"); 
     String jsonMes1 = jsonArr.get(i).toString(); 
     URL url = new URL("http://localhost:8086/myService"); 

     conn = (HttpURLConnection) url.openConnection(); 
     conn.setDoOutput(true); 
     conn.setRequestMethod("POST"); 
     conn.setRequestProperty("Content-Type", "application/json"); 

     OutputStream os = conn.getOutputStream(); 
     os.write(jsonMessage.getBytes()); 
     os.flush(); 

     if (conn.getResponseCode() != HttpURLConnection.HTTP_OK) { 
      LOGGER.info(" FAILED "); 
     } else { 
      LOGGER.info(" SUCESSFULLY PROCESSED "); 
     } 
     n = m; 
     n++; 
    } else if (n == i) { 
     //Same process in different port 
     o = n; 
     o++; 
    } else if (o == i) { 
     //Same process in different port 
     p = o; 
     p++; 
    } else if (p == i) { 
     //Same process in different port 
     m = p; 
     m++; 
    } 

如果條件運行在不同的端口,所有3個以上的其他重複代碼相同。但是,如果第一個請求完成,然後第二個處理完成,那麼問題就是一次,但我需要以並行方式進行。我只需要在我從JSON數組迭代對象的地方並行處理它。請建議如何以並行方式

+2

你嘗試過什麼嗎? – Turing85

+0

它正在同步處理,但我需要異步繼續處理4進程完成16次處理 – user3428736

回答

1

實現這一假設要同步繼續休息後來電:要素的可變部分,並把它在一個列表中,然後使用並行數據流,如:

Arrays.asList("port1", "port2", "port3").parallelStream() 
    .forEach(port -> performRestCall(port)); 

或者,您也可以使用ForkJoinPool

P.S.本着乾淨編碼的精神,避免使用像n,m,n,p這樣的變量。

+0

您能否建議我如何以異步方式處理多處理 – user3428736

+1

您不希望等待其餘調用返回並繼續執行?換句話說,你只想用火和遺忘的方式產生工作線程? –