【问题标题】:Rest Web Service Interface - MultithreadedRest Web 服务接口 - 多线程
【发布时间】:2019-04-13 23:35:42
【问题描述】:

下面是现有 Rest 接口实现的 sn-p。

@RestController
@RequestMapping("/login")
public class LoginController {


    @Autowired
    private LoginProcessor loginProcessor;

    @RequestMapping(
        consumes = MediaType.TEXT_XML_VALUE, 
        produces = { MediaType.TEXT_XML_VALUE,
                     MediaType.APPLICATION_JSON_VALUE },
        value = "/v1/login", 
        method = RequestMethod.POST)

     public LoginResponse loginRequest(
            @RequestBody String credentials) throws JAXBException {

               return loginProcessor.request(credentials);
     }
}

如果对 loginRequest() 的 REST 调用是从不同的客户端发起的,并且可能是同时发起的:-

1) 是否会创建一个新线程来处理每个请求。因此,所有请求都在同时处理?

2) 是否有一个线程来处理所有请求,这意味着任何时候只有 loginRequest() 正在执行,而其他请求排队?

理想情况下,我希望界面能够在任何时候处理多个请求。

感谢您在澄清和加深我对该主题的理解方面提供的帮助。

皮特

【问题讨论】:

标签: java multithreading


【解决方案1】:

我想您正在使用 spring 框架(因为您使用了 Autowired 和其他注释)。因此回答您的问题:是的,spring 将为每个新请求创建新线程。请参考这个答案,这应该可以解决您的疑问

https://stackoverflow.com/a/17236345/7622687

【讨论】:

  • 嗨 NiksVij。感谢您的及时答复。 My 部署在 WebLogic 容器中,因此从响应中,WebLogic 将创建一个新线程来处理每个请求。有没有办法确认这发生在 WebLogic 或其他方式上。 ?
  • 嘿皮特。我对 WebLogic 没有太多经验,但我认为您应该能够通过以下方式来确认上述内容:stackoverflow.com/questions/1323408/… 并添加一些日志语句。希望它有所帮助:)
【解决方案2】:

每个应用程序都应该在服务器上运行,无论是 web 服务器(tomcat)还是应用程序服务器(web 逻辑),默认情况下,tomcat web 容器将有 200 个线程(您可以根据需要调整),因此一次可以同时处理 200 个线程在tomcat中

对于每个输入请求,Web 容器线程将在调度程序 servlet 旁边接收到相应的控制器类

【讨论】:

  • 嗨死侍。感谢您的及时答复。
【解决方案3】:

您可以在堆栈溢出中搜索此类问题,因为之前已回答过。您可以阅读以下答案: https://stackoverflow.com/a/7457252/10632970 https://stackoverflow.com/a/17236345/10632970

祝你学业顺利。

【讨论】:

  • 你好安德烈。感谢您的及时答复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多