我正在尝试为Vertx web客户端编写一个包装器,以便使用reactivestreams中的Publisher从服务器加载响应正文:
import org.reactivestreams.Publisher;
import io.vertx.reactivex.ext.web.client.WebClient;
interface Storage {
Publisher<ByteBuffer> load(String key);
}
class WebStorage implements Storage {
private final WebClient client;
public WebStorage(final WebClient client) {
this.client = client;
}
@Override
public Publisher<ByteBuffer> laod(final String key) {
return client.get(String.format("https://myhost/path?query=%s", key))
.rxSend()
.toFlowable()
.map(resp -> ByteBuffer.wrap(resp.body().getBytes()));
}
}
此解决方案是不正确的,因为它通过调用以阻塞方式读取所有正文字节。
是否可以分块读取来自Vertx网络客户端的响应,并将其转换为发布者(或Rx可流动的)?
我想你可以使用ByteCodec.pipe:
import io.reactivex.Flowable;
import io.vertx.ext.reactivestreams.ReactiveWriteStream;
import io.vertx.reactivex.core.Vertx;
import io.vertx.reactivex.core.buffer.Buffer;
import io.vertx.reactivex.core.streams.WriteStream;
import io.vertx.reactivex.ext.web.client.WebClient;
import io.vertx.reactivex.ext.web.codec.BodyCodec;
import org.reactivestreams.Publisher;
import java.nio.ByteBuffer;
interface Storage {
Publisher<ByteBuffer> load(String key);
}
class WebStorage implements Storage {
private final Vertx vertx = Vertx.vertx();
private final WebClient client;
public WebStorage(final WebClient client) {
this.client = client;
}
@Override
public Publisher<ByteBuffer> load(final String key) {
final ReactiveWriteStream<Buffer> stream = ReactiveWriteStream.writeStream(vertx.getDelegate());
client.get(String.format("https://myhost/path?query=%s", key))
.as(BodyCodec.pipe(WriteStream.newInstance(stream)))
.rxSend().subscribe();
return Flowable.fromPublisher(stream).map(buffer -> ByteBuffer.wrap(buffer.getBytes()));
}
}
垂直方向。x Web客户端不是为流式传输响应主体而设计的。它通过设计缓冲内容。
如果要流式传输内容,可以使用更灵活的底层HTTP客户端。
我不确定如何处理这个问题,http响应状态取决于我需要阅读的主体。我有这样的想法: 但为了获得阅读正文所需的状态,我看不到任何使用发布者提供的值的选项。我如何使其能够调用上面的方法,并在创建NetYoutBound时使用该状态
我使用了来自org的openapi生成器maven插件。在我的Spring Boot项目中启用了被动配置的openapitools。我的一个endpoint返回一个列表体响应,该响应自动生成为Mono 如何使用WebTestClient在联调中测试endpoint控制器的主体? 如果我尝试这样做,它不会起作用,因为我接收到的是通量,而不是预期的dto对象。
问题内容: 我不熟悉Spring RestTemplate。 但是对于这个项目,我必须使用Spring RestTemplate发送POST调用以使用rest api。 我正在使用此代码: 一切正常。 我想检索HTTP状态代码(例如:200 OK。)。我该怎么办?谢谢。 问题答案: 您可以按以下方式使用postForEntity方法…
我有一个关于Spring Reactive WebClient的问题...几天前,我决定在Spring Framework中玩新的反应式东西,我做了一个仅用于个人目的的抓取数据的小项目。(向一个网页发出多个请求并组合结果)。 我开始使用新的反应式WebClient发出请求,但我发现的问题是客户端没有对每个请求发出响应。听起来很奇怪。下面是我为获取数据所做的工作: 以及调用fetchData的函数:
我不知道如何使用 React 正确实现发布者/订阅者方案。我有一个有效的解决方案,但对我来说,实现似乎不正确: 我的问题是,我需要手动实现发布者来注册订阅者并传递事件: 然后,我有一个WorkQueue处理器(应该是消费者): 它工作得很好,但很难看。在这个取自Spring Guides的示例中,他们使用EventBus将事件从发布者路由到消费者,但当我尝试将其与处理器链接时,我得到了以下编译器错
我正在研究访问HTTP请求和响应体的最佳方式,以便在Spring反应式应用程序中进行跟踪。 对于以前的版本,我们已经利用Servlet过滤器和Servlet请求包装器来使用传入请求的输入流,并保存其副本,以便异步处理跟踪(我们将其发送给Elasticsearch)。 但对于一个Spring反应式应用程序(使用webflux),我想知道在解码之前访问请求的最合适方式是什么。有什么想法吗?