Igo*_*oso 10 rest spring spring-mvc reactive-programming spring-webflux
我需要在后端作业(可执行jar)上使用反应式rest API(使用spring webflux构建).
我读过有关Spring WebClient的内容,但我不了解一些观点.
例如:
WebClient webClient = WebClient.create("http://localhost:8080");
Mono<Person> person = webClient.get()
.uri("/persons/{id}", 42)
.accept(MediaType.APPLICATION_JSON)
.exchange()
.then(response -> response.bodyToMono(Person.class));
Run Code Online (Sandbox Code Playgroud)
在最后一行,有一个"bodyToMono".这是我的问题:
如果被调用的Rest API已经是一个被动服务,我是否需要将响应转换为单声道?有什么地方我错过了吗?
从我的角度来看,我认为可以有一种方法在代码中明确表示我的Rest API是被动的,但可能是我不知道的事情.
小智 10
是的,这是必需的.被动反应的整个想法是确保没有任何线程被IO阻止.
您可能已经使服务器端服务处于被动状态,但是当您消费时,在客户端被阻止时获得的好处是什么,直到服务器有响应.您的客户端线程一直等待,直到服务器响应.这是不希望的.
webClient.get()
.uri("/persons/{id}", 42)
.accept(MediaType.APPLICATION_JSON)
.exchange().block()
Run Code Online (Sandbox Code Playgroud)
将阻止当前客户端线程等待服务器响应.这可能会阻止您的客户端线程.
webClient.get()
.uri("/persons/{id}", 42)
.accept(MediaType.APPLICATION_JSON)
.exchange()
.then(response -> response.bodyToMono(Person.class));
Run Code Online (Sandbox Code Playgroud)
为您提供Mono,它是对将来可以发出单个值的发布者的引用.因此客户端线程未被阻止.
我在博客上对此进行了更多解释. https://dzone.com/articles/spring-5-reactive-web-services
| 归档时间: |
|
| 查看次数: |
5025 次 |
| 最近记录: |