[ 
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)

Reply via email to