[
https://issues.apache.org/jira/browse/DUBBO-22?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Jun Liu updated DUBBO-22:
-------------------------
Description:
# Consumer side: ListenableFuture or CompletableFuture
# Provider side:
Sth. like asynchronous support from Servlet 3.0
{code:java}
@WebServlet(name="myServlet", urlPatterns={"/slowprocess"}, asyncSupported=true)
public class MyServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
{
AsyncContext aCtx = request.startAsync(request, response);
ServletContext appScope = request.getServletContext();
((Queue<AsyncContext>)appScope.getAttribute("slowWebServiceJobQueue")).add(aCtx);
}
}
@WebServletContextListener
public class SlowWebService implements ServletContextListener {
public void contextInitialized(ServletContextEvent sce) {
Queue<AsyncContext> jobQueue = new
ConcurrentLinkedQueue<AsyncContext>();
sce.getServletContext().setAttribute("slowWebServiceJobQueue",
jobQueue);
// pool size matching Web services capacity
Executor executor = Executors.newFixedThreadPool(10);
while(true)
{
if(!jobQueue.isEmpty())
{
final AsyncContext aCtx = jobQueue.poll();
executor.execute(new Runnable(){
public void run() {
ServletRequest request = aCtx.getRequest();
// get parameteres
// invoke a Web service endpoint
// set results
aCtx.forward("/result.jsp");
}
});
}
}
}
public void contextDestroyed(ServletContextEvent sce) {
}
}
{code}
was:
TODO: more details
* Consumer side: ListenableFuture or CompletableFuture
* Provider side: AIO like Servlet
* even reactive?
> Asynchronous API
> ----------------
>
> Key: DUBBO-22
> URL: https://issues.apache.org/jira/browse/DUBBO-22
> Project: Apache Dubbo
> Issue Type: Improvement
> Reporter: Jun Liu
> Priority: Major
> Labels: GSoC2018
> Original Estimate: 1,008h
> Remaining Estimate: 1,008h
>
> # Consumer side: ListenableFuture or CompletableFuture
> # Provider side:
> Sth. like asynchronous support from Servlet 3.0
> {code:java}
> @WebServlet(name="myServlet", urlPatterns={"/slowprocess"},
> asyncSupported=true)
> public class MyServlet extends HttpServlet {
>
> public void doGet(HttpServletRequest request, HttpServletResponse
> response) {
> AsyncContext aCtx = request.startAsync(request, response);
> ServletContext appScope = request.getServletContext();
>
> ((Queue<AsyncContext>)appScope.getAttribute("slowWebServiceJobQueue")).add(aCtx);
> }
> }
> @WebServletContextListener
> public class SlowWebService implements ServletContextListener {
> public void contextInitialized(ServletContextEvent sce) {
> Queue<AsyncContext> jobQueue = new
> ConcurrentLinkedQueue<AsyncContext>();
> sce.getServletContext().setAttribute("slowWebServiceJobQueue",
> jobQueue);
> // pool size matching Web services capacity
> Executor executor = Executors.newFixedThreadPool(10);
> while(true)
> {
> if(!jobQueue.isEmpty())
> {
> final AsyncContext aCtx = jobQueue.poll();
> executor.execute(new Runnable(){
> public void run() {
> ServletRequest request = aCtx.getRequest();
> // get parameteres
> // invoke a Web service endpoint
> // set results
> aCtx.forward("/result.jsp");
> }
> });
> }
> }
> }
>
> public void contextDestroyed(ServletContextEvent sce) {
> }
> }
> {code}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)