【问题标题】:Can we make parallel Service calls using Spring framework我们可以使用 Spring 框架进行并行服务调用吗
【发布时间】:2014-06-12 08:23:15
【问题描述】:

我有一个网站,其中包含主页、搜索文本和按钮以及 5-6 个选项卡。根据搜索文本,选项卡会有独立的服务调用(对后端的 API 调用)。每个选项卡都有不同的数据。单击搜索后,我打算获取一个选项卡的数据并将其加载到 UI 中,并让其他选项卡的数据在后台加载。

我打算使用 Spring MVC 来完成这个任务,但我不确定 spring 是否支持这种并行服务调用。

有没有其他框架可以做到这一点?

任何指针都会有所帮助。

【问题讨论】:

    标签: spring spring-mvc


    【解决方案1】:

    Spring MVC 可以做到这一点。因为它可以处理并行请求(它不会注意它们来自同一个客户端)。

    “问题”是让客户端发送这个并行请求(每个选项卡一个)。

    【讨论】:

    • 那么,除了为每个请求手动创建线程之外,客户端还有什么方法可以发送这个并行请求?
    • 见:stackoverflow.com/questions/2318615/…——你不能有两个真正的线程,但你可以发送一个请求(不等待结果)然后立即发送第二个请求。
    【解决方案2】:

    独立的服务调用(对后端的 API 调用)

    我猜,您说的是 Ajax 请求 (HTTP)。

    所有 Java EE Web 框架(当然还有 SpringFramework MVC)都基于 HttpServlet 用法。你也可以阅读JSR-315 specification

    重要的是,每个 servlet 请求都在单独的线程中运行。 线程创建由 servlet 容器(tomcat、GlassFish、Jetty 等)执行,因此您无需手动执行。

    所以答案肯定是肯定的。

    其他框架请关注the list in wiki

    UPD。 关于客户。 Ajax 请求按照定义是异步的,因此很容易实现并行请求。

    关于如何在客户端 (Jquery) 上进行并行调用的小而快速的示例:

    <script type="text/javascript">
    $( document ).ready(function() {
        $("#searchButton").click(function(){
            var pattern = $("#searchText").val();
            var processingMap = [
                {tabid:"tab1", url:"./first-api-call"},
                {tabid:"tab2", url:"./second-api-call"},
                {tabid:"tab3", url:"./third-api-call"},
                {tabid:"tab4", url:"./fourth-api-call"},
                {tabid:"tab5", url:"./fifth-api-call"}
            ];
    
            $(processingMap).each(function(index, element){
                $.ajax(element.url,{
                    'type':'get',
                    'data':{'pattern':pattern},
                    'dataType':'text',
                    'success':function(data, textStatus, jqXHR){
                        setTabContent(element.tabid,data);
                    }
                });
            });
        });
    
        function setTabContent(tabid, content){
            $('#'+tabid).text(content);
        }
    
    }); 
    </script>
    
    <input type="text" value="" id="searchText">
    <input type="button" value="Search" id="searchButton">
    
    <div id="tab1">tab1</div>
    <div id="tab2">tab2</div>
    <div id="tab3">tab3</div>
    <div id="tab4">tab4</div>
    <div id="tab5">tab5</div>
    

    【讨论】:

    • 是的,每个 servlet 请求都在单独的线程上处理,但是如何为每个调用创建并行请求?例如:获取 search_text 输入(单击按钮后),我有一个数据选项卡,其中有 5 个对后端的 API 调用,我想并行执行这些选项卡并将此选项卡显示给用户,而在其余选项卡的后端数据中是已填充。
    • 更新了我的答案,请看。
    • 感谢您的描述性回答。还有一个问题/疑问:如果标签 1 的调用处理完成,它会显示该标签的内容而无需等待其他标签,对吧?
    • 看来它应该适用于我的情况。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2017-08-26
    • 2017-12-07
    • 1970-01-01
    • 1970-01-01
    • 2018-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多