java dispo lock_java - 在Java中同步请求响应 - SO中文参考 - www.soinside.com

有两种方法可以做到这一点。首先,我将解释反应性和webflux的好方法。@GetMapping(value = "/anothertest")

public Mono rest() {

log.info("request number " + reqCounter++);

CompletableFuture stringCompletableFuture = sendRequestWithJavaHttpClient().thenApply(x -> "test: " + x);

Duration between = Duration.between(

LocalTime.now(),

LocalTime.parse("14:01:00")// I am assuming there is a time we send data back

);

return Mono.first(Mono.delay(between)).then(Mono.fromFuture(stringCompletableFuture));

}

private CompletableFuture sendRequestWithJavaHttpClient() {

return CompletableFuture.supplyAsync(() -> {

// do some logic here

return "hello world.";

});

}

正如我们对第一个单声道所说,要延迟响应,它将等待时间到来,然后再进行函数调用。这是很好的方法,因为通过这种方法,不会阻塞响应。所有客户都需要等待。您将需要使用spring的webflux。

第二种也不酷的方法是阻塞线程。这个用spring mvc@GetMapping(value = "/caract/opcoes/acoes/disponiveis*")

public ResponseEntity getDatasCaractOpcoesAcoesDisponiveis() throws Exception {

log.info("request number " + reqCounter++);

Duration between = Duration.between(

LocalTime.now(),

LocalTime.parse("14:10:00")

);

log.info("will sleep "+between.toMillis());

Thread.sleep(between.toMillis());

return new ResponseEntity("hello world", HttpStatus.OK);

}

这将阻塞服务器线程,直到时间到了。关于这个的问题是tomcat的线程数。默认值为200,因此您的应用程序最多可以有200个请求,之后,tomcat将无法再建立连接。您可以通过在application.properties中更改server.tomcat.max-threads = 500来增加它

如果从设计的角度来看,我对这两种方法的看法不好,因为客户不应等待。我会回应,直到时间到来。如果时间合适,那就回应真实的结果。这样,客户端可以在没有负载的情况下请求任意数量的请求。并且服务器端将不会有任何负载,因为没有东西被阻止。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值