[
https://issues.apache.org/jira/browse/DUBBO-22?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Jun Liu updated DUBBO-22:
-------------------------
Summary: Asynchronous Support on Provider Side (was: Asynchronous API)
> Asynchronous Support on Provider Side
> -------------------------------------
>
> 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
>
> # Provider side:
> 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)