我是新来spring的-WebFlux。
我正在2核处理器中运行下面的示例项目。我的RESTful api将调用外部api,并且外部api响应小于500ms。
当我使用jMeter进行负载测试时,不能达到15 TPS以上。
我是不是遗漏了什么或者下面的设计有什么问题?
在Webflux项目中重写默认的线程池执行器有多有效?
提前谢谢你。
controller.java
----------------
LookupController
{
@AutoWired
private LookupService LookupService;
@PostMapping(value=“/findOrder”)
public Mono>findOrder(@RequestBody InputBean InputBean){
返回LookupService.FindOrder(输入Bean)
.Map(resp->ResponseEntity.OK(resp))
.DefaultifEmpty(ResponseEntity.NotFound().Build());
}
}
服务
---------
@Service
public class LookupService
{
private RestWorker RestWorker;
public Mono findOrder(InputBean InputBean)
{
..//Basic Validation
ApiBean ApiBean=RestWorker.BuildApibean(InputBean);
Mono responseStr=RestWorker.CallAPI(ApiBean);
return responseStr.FlatMap(resp->{
//Business
}
帮助程序
---------
@Component
public RestWorker{
private Webclient Webclient=null;
@postconstruct
private void initWorker(){
webClient=webClient.builder()
.baseurl(httpUrl)
.defaulteader(httpheaders.content_type,“application/json”)
.defaulteader(httpheaders.accept,“application/json”)
.defaulteader(httpheaders.accept,“application/json”)
.build();
}
public ApiBean buildApiBean(InputBean InputBean){
//基于输入bean+配置值创建ApiBean
...
返回ApiBean;
}
public Mono callApi(ApiBean ApiBean){
Mono responseMonoStr=Null;
try{
responseMonoStr=WebClient.Post()
.URI(url_tibco)
.Body(BodyInserters.FromObject(reqDoc))
.Exchange()
.Timeout(Duration.OfMillis(socketReadTimeout))
.FlatMap(clientResponse->{
}
}
布莱恩·克洛泽,
太感谢你了。非阻塞api是基于少量线程的事件循环工作的。但是,当我发送一些并行请求时,它会打开两个不同的线程,如reactor-http-nio-2和reactor-http-nio-3。
为什么它在每个并行请求上打开不同的线程?
它不是,因为spring WebFlux没有使用线程池执行器来调度web请求。而是使用其他服务器资源,如事件循环(用于Netty)。有关这方面的更多信息,您可以查看spring boot关于reactive server resources的参考文档,更重要的是了解spring WebFlux中的并发模型。
我正在使用线程池执行器更改遗留设计。详情如下:- 遗留:-对于遗留设计,在应用程序启动时创建600个线程。和放置在各种池中,然后在需要时提取这些池,并将任务分配给相应的线程。 新:-在新设计中,我将线程池替换为执行器服务 我观察到的是,对于Executor,在启动时不会创建线程。它们是在从客户端激发请求时创建的。因此,与前一个线程相比,在内存中创建的线程要少得多。 但我的问题是,这样做是否正确,因
本文向大家介绍如何覆盖Spring Boot项目的默认属性?相关面试题,主要包含被问及如何覆盖Spring Boot项目的默认属性?时的应答技巧和注意事项,需要的朋友参考一下 这可以通过在application.properties文件中指定属性来完成。 例如,在Spring MVC应用程序中,您必须指定后缀和前缀。这可以通过在application.properties文件中输入下面提到的属性来
我有一个RESTAPI,我不想强迫客户端发送请求参数。我有将近400个api方法,我不想将所有参数设置为“required=false” 我想覆盖Spring RequestParam的默认行为。我想将RequestParam接口的“required”属性的默认值设置为“false”。 有什么方法可以覆盖它吗?如果我不能或这不是最佳实践,有什么方法可以解决上述问题。
问题内容: 我已经能够覆盖所有名称以“ android:”为前缀的主题,但是Android themes.xml还定义了似乎无法被覆盖的属性。例如: colorTheground是在Theme.Light xml中定义的,但是在此处添加它可以使我 错误。如何为整个应用程序覆盖该样式? 问题答案: 您可以用修改属性(如)的方式覆盖标准属性,只是不要忘记添加如下前缀:
问题内容: 我想覆盖Java外观。我只想显示不同的按钮。 我想要Windows Look and Feel的所有功能,但仅按钮有所不同。希望你明白我的意思。 还告诉我如何制作圆形的JtabbedPane ??? 问题答案: 自定义GUI类 调用您的自定义GUI类
问题内容: 我有一个模板与此: Django自动将此翻译为Terminarsesión西班牙语。但是,我想将其翻译为Cerrarsesión。 我试图将此文字添加到.po文件中,但是在编译消息时出现错误,指出该文字重复。 有没有一种方法可以更改/覆盖默认的Django翻译? 谢谢。 问题答案: 最简单的方法是收集在django.contrib.admin语言环境文件夹中找到的.po文件,然后重新编