如何使用 WebClient 使用 React Spring Rest API
How to consume a Reactive Spring Rest API with WebClient
我需要在后端作业(可执行 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));
在最后一行,有一个"bodyToMono"。这就是我的问题:
如果被调用的 Rest API 已经是响应式服务,我是否需要将响应转换为单声道?有什么我想念的吗?
从我的角度来看,我认为可以有一种方法可以在代码中明确表明我的 Rest API 是反应性的,但可能是我不知道的事情。
是的,这是必需的。
反应的整个想法是确保线程的 none 被 IO 阻塞。
您可能已经使您的服务器端服务具有反应性,但是当您使用它时,当您的客户端被阻止直到服务器有响应时,您获得的好处是什么。您的客户端线程一直在等待,直到服务器响应。这是不希望的。
webClient.get()
.uri("/persons/{id}", 42)
.accept(MediaType.APPLICATION_JSON)
.exchange().block()
将阻塞您当前的客户端线程以等待服务器响应。这可能会阻塞您的客户端线程。
webClient.get()
.uri("/persons/{id}", 42)
.accept(MediaType.APPLICATION_JSON)
.exchange()
.then(response -> response.bodyToMono(Person.class));
为您提供一个 Mono,它是对将来可以发出单个值的发布者的引用。所以客户端线程是非阻塞的。
我已经在博客上详细解释了这一点。
https://dzone.com/articles/spring-5-reactive-web-services
我需要在后端作业(可执行 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));
在最后一行,有一个"bodyToMono"。这就是我的问题:
如果被调用的 Rest API 已经是响应式服务,我是否需要将响应转换为单声道?有什么我想念的吗?
从我的角度来看,我认为可以有一种方法可以在代码中明确表明我的 Rest API 是反应性的,但可能是我不知道的事情。
是的,这是必需的。 反应的整个想法是确保线程的 none 被 IO 阻塞。
您可能已经使您的服务器端服务具有反应性,但是当您使用它时,当您的客户端被阻止直到服务器有响应时,您获得的好处是什么。您的客户端线程一直在等待,直到服务器响应。这是不希望的。
webClient.get()
.uri("/persons/{id}", 42)
.accept(MediaType.APPLICATION_JSON)
.exchange().block()
将阻塞您当前的客户端线程以等待服务器响应。这可能会阻塞您的客户端线程。
webClient.get()
.uri("/persons/{id}", 42)
.accept(MediaType.APPLICATION_JSON)
.exchange()
.then(response -> response.bodyToMono(Person.class));
为您提供一个 Mono,它是对将来可以发出单个值的发布者的引用。所以客户端线程是非阻塞的。
我已经在博客上详细解释了这一点。 https://dzone.com/articles/spring-5-reactive-web-services