我已經經歷了很多線程,但沒有得到關於如何在任何Web服務調用上實現線程池的具體解決方案,其中創建了REST服務。需要幫助來實現Java中REST Web服務的線程池
就給人一種高層次的想法 -
1)調用Web服務,通過servlet的 2)來的servlet擊中Web服務的每個請求都應該放在隊列中,如果事先請求未被完全與處理返回響應 3)假設應用程序服務器啓動並在8080端口上運行,我很難實現線程池給出的錯誤 - java.net.BindException:已在使用的地址:JVM_Bind 4)我不確定如何處理它端到端的請求隊列中的Web服務調用在servlet中
下面是代碼描述 -
1)一個servlet類的doPost()調用我的REST服務
HttpClient httpClient = HttpClientBuilder.create().build();
String requrl = "http://myappserver:8080/TestApp/test/testExecute.service";
String jsonvalue = "{\"param1\":\"value1"," +
"\"param2\":\"value2\"}";
LOG.info("json value: " + jsonvalue);
HttpPost postRequest = new HttpPost(requrl);
String message = jsonvalue;
StringEntity input = new StringEntity(message);
input.setContentType("application/json");
postRequest.setEntity(input);
HttpResponse response = httpClient.execute(postRequest);
2)Web服務 -
import java.io.Serializable;
import org.codehaus.jackson.annotate.JsonPropertyOrder;
import org.codehaus.jackson.annotate.JsonWriteNullProperties;
import org.codehaus.jackson.map.annotate.JsonSerialize;
@JsonWriteNullProperties(false)
@JsonPropertyOrder({
"param1",
"param2"
})
public class TestExecuteRequest implements Serializable {
private static final long serialVersionUID = 1L;
@JsonSerialize(include=JsonSerialize.Inclusion.ALWAYS)
protected String param1;
@JsonSerialize(include=JsonSerialize.Inclusion.ALWAYS)
protected String param2;
/**
* @return the param1
*/
public String getParam1() {
return param1;
}
/**
* @param param1 the param1 to set
*/
public void setParam1(String param1) {
this.param1 = param1;
}
/**
* @return the param2
*/
public String getParam2() {
return param2;
}
/**
* @param param2 the param2 to set
*/
public void setParam2(String param2) {
this.param2 = param2;
}
}
Class having web service definition -
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Response;
import org.jboss.resteasy.annotations.providers.jaxb.Formatted;
@Path("test")
public interface TestFrame {
@POST
@Consumes("application/json")
@Formatted
@Produces("application/json")
@Path("/testExecute.service")
Response executeTestSuite(TestExecuteRequest testExeRequest);
}
Web service performing some operations in TestService class
public class TestService implements TestFrame {
// Logic to perform all operations after web service has been called
}
誰能幫助我,在哪裏在上述任何一個類中寫入線程池,以便在servlet中調用上述Web服務時,可以一個接一個地處理請求?
希望你的幫助。
謝謝 MN
對不起,提到更多的細節,我嘗試了一個小任務的ThreadPool邏輯可用在互聯網上,這並沒有解決我的問題,並給了我BindException。這就是我提供所有代碼細節的原因,請從頭開始解釋我如何處理處理多個Web服務調用請求所需的隊列或線程池。 – user3896624
您可以在執行executeTestSuite中添加以下內容嗎?打印當前線程名稱以檢查您的容器是否已經爲您創建多個線程。 – nono