WebClient在请求写入完成之前不会读取响应.
我正在尝试实现流媒体代理. 我面对Spring Reactive的WebClient的问题. 任何人都可以帮助我理解我是否有一些错误的方式,或者只是Webclient side的错误? 堆栈: 反应堆netty 0.7.8.Release 弹簧靴2.0.4.Release desc: 我想将很长的流到外部服务中,然后对请求者的响应响应. 流媒体正在使用块(HTTP 1.1传输编码:块)进行. 外部服务处理每个块并发送到响应结果. 预期行为: WebClient应该立即阅读每个收到的响应的部分. 实际行为: WebClient在请求写入完成之前不会启动过程响应. 代码: return client .post() .header("Transfer-Encoding", "chunked") //because I want to flush each received part .body((
4 2023-11-29
编程技术问答社区
用spring webclient对http请求进行可读的调试记录
我正在使用Spring Reactive WebClient将请求发送到HTTP服务器.在查看要发送的基础请求和响应的命令中,我启用了reactor.ipc.netty软件包的调试记录. 可以正常查看即可请求的标题. 我要通过http发送和接收纯文本,日志包含以下格式的请求和响应(是十六进制?) 我不确定如何以一种易于理解的方式查看已记录的数据.更好地以可理解的方式记录请求和响应 这是已记录数据的片段 +-------------------------------------------------+ | 0 1 2 3 4 5 6 7 8 9 a b c d e f | +--------+-------------------------------------------------+----------------+ |00000000| 47 45 54 20 2f 53 65
4 2023-11-29
编程技术问答社区
WebClient获取SSL/TLS证书
java.net在其API中具有简单的getServerCertificates(如下示例).我在反应堆netty中寻找类似的操作,如果没有,则在任何其他反应性API中用于Spring-Boot/webflux/httpclient. 此操作(客户端读取证书)似乎在反应堆网中似乎不可能.是吗?如果不是另一个弹簧启动组件中的替代方法? package com.example.readCertificate.service; import java.net.URL; import java.securiiity.cert.Certificate; import javax.net.ssl.HttpsURLConnection; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class ShowCert { private Logger
18 2023-09-28
编程技术问答社区
Spring WebFlux Netty SSL with Self Signed Certificate错误
我正在尝试使用Localhost的HTTPS在Netty上运行的Spring Boot应用程序,使用服务器端上的自签名证书. 我的application.properties看起来像这样: server.ssl.enabled=true server.ssl.key-store-type=JKS server.ssl.key-store=test.jks server.ssl.key-store-password=password server.ssl.key-alias=testkey 我已经通过: 生成了密钥库 keytool -genkeypair -alias testkey -keyalg RSA -keysize 4096 -keystore test.jks -validity 36500 我会收到以下错误: io.netty.handler.codec.decoderexception:javax.net.ssl.ssl.sslhandsha
10 2023-09-27
编程技术问答社区
为spring-webflux WebClient配置带有reactor netty的HostnameVerifier
我正在尝试使用SSL和客户端主机名验证配置Spring-Webflux WebClient(带有引擎盖下的反应堆Netty).我为我提供Javax.net.ssl.sslcontext,hostNameVerifier和一个受信任的主机名列表(作为字符串列表). 到目前为止,我已经使用SSLContext配置了WebClient,但是我找不到一种配置主机名验证的方法. 陈述我的问题:我有一组受信任的服务主机名(字符串列表)和一个hostNameVerifier.我想用它配置我的网络. 是否有可能使用Javax.net.ssl.hostnameverifier进行操作?反应堆Netty有其他方法吗? 这就是我到目前为止所拥有的: WebClient.builder() .clientConnector( new ReactorClientHttpConnector( opt -> opt.sslContext(new JdkSslCon
36 2023-09-27
编程技术问答社区
在带有反应式启动器的Spring Boot 2中没有使用Netty Server。
我正在使用Spring Boot 2和反应性启动器开发一个反应性项目.我的问题是,当我启动应用程序时,tomcat服务器已启动而不是Netty. 这是我从build.gradle文件的依赖项任务: dependencies { compile("org.springframework.boot:spring-boot-starter-actuator:${springBootVersion}") compile("org.springframework.boot:spring-boot-starter-webflux:${springBootVersion}") compile("org.springframework.boot:spring-boot-starter-hateoas:${springBootVersion}") compile group: 'com.github.tomakehurst', name: 'wiremock', version: '2.15.
20 2023-09-15
编程技术问答社区
来自WebFlux的WebClient的多个SSLContext
我需要从使用WebClient的应用程序调用多个不同的API. 假设有两种不同的API.对于这些API,我必须使用由不同证书构建的不同SSLContexts. 我为他们创建不同的SSLContext(使用不同的证书). 作为WebClient的后端,我使用标准方法 - ReactorClientHttpConnector与反应堆Netty HTTP客户端 ssl可以以下方式配置在此处: new ReactorClientHttpConnector(HttpClient.create() .secure(sslContextSpec -> sslContextSpec.sslContext(sslContext)) ); ,但我不确定如何配置多个不同的SSLContext(每个API). 现在我看到了三种方法: 选项1: 用不同的httpclient(HttpClient.create)创建两个不同的ReactorClientHttp
如何在WebFilter上配置Spring DataBuffer的大小
我从客户端获得了GZZ的内容,我需要在它到达控制器之前对其进行解压缩,否则我会得到杰克逊解析的例外. 我创建了一个将请求包装并将其映射到缩放的字节阵列中的网络滤光器: @Override public Flux getBody() { return request.getBody().map(requestDataBuffer -> { try { GZIPInputStream gzipInputStream = new GZIPInputStream(requestDataBuffer.asInputStream()); StringWriter writer = new StringWriter(); IOUtils.copy(gzipInputStream, writer, UTF_8); byte[] targetArray
20 2023-09-15
编程技术问答社区
如何在Spring Webclient中获得最后的重定向URL
可以创建遵循重定向的客户端,如下所示: WebClient.builder() .clientConnector(new ReactorClientHttpConnector( HttpClient.create().followRedirect(true) )) 在URL上调用HEAD请求后,如何检索最终Location标题?换句话说,我们如何将最终URL重定向到? 解决方案 的确,HttpClient#followRedirect(true)启用重定向. 但是,还有HttpClient#followRedirect(BiPredicate),在这里您可以更精确地控制您要重定向时,除此之外,您还可以访问响应和Location标题,因此,在任何时候,您都会知道那里的位置将在哪个位置重定
8 2023-09-15
编程技术问答社区
webflux中的DefaultMultipartMessageReader vs SynchronossPartHttpMessageReader
在WebFlux中,我们有两个不同的实现来读取Multipart请求Body DefaultMultipartMessageReader&SynchronossPartHttpMessageReader 我看到他们俩在写作时都使用Nio.由于我使用的是Netty(Netty Netty),即使是从请求正文中阅读也将使用Nio 进行. 如果是这样,每个人的目的是什么? 解决方案 从春季框架5.2开始,Spring Webflux确实使用2个Multipart Reader实现. 在春季框架5.0中,多部分读取器的实现依靠第三方库(Synchronoss)以非阻滞方式读取Multipart请求.但是,这种失败并没有完全反应性,可以缓冲数据并将其写入磁盘作为临时文件. 如
8 2023-09-15
编程技术问答社区
Spring Webflux,发布请求数据被间歇性截断
通过邮政方法发送的请求正文被截断(有时),因此未按要求处理. 在应用程序日志中没有记忆异常. 重试后成功处理相同的请求 春季引导代码样本 控制器 @RequestMapping(value = "/updateRequest", method = RequestMethod.POST) @ResponseStatus(HttpStatus.OK) public Mono update(@RequestBody Payload e) { return bookService.sendRequest(e); } public class RequestProcessor extends ServerHttpRequestDecorator { private final ServerHttpRequest requestDecorator; public RequestProcessor(Se
6 2023-09-15
编程技术问答社区
反应堆组与并行性在同一线程上运行
我试图每组实现并行性,其中分组的元素在组中,并且在组中每个元素在依次起作用.但是,对于以下代码,第一个发射器使用并行线程,但是对于后续发射,它使用了一些不同的线程池.如何实现组中的组和元素的顺序执行. 中的元素. public class ReactorTest implements SmartLifecycle, ApplicationListener { private AtomicInteger counter = new AtomicInteger(1); private Many healthSink; private Disposable dispose; private ScheduledExecutorService executor; @Override public void start() { executor = Execu
4 2023-09-15
编程技术问答社区
如何用Spring Boot 2.1 Webflux定制Netty?
我想在我的Spring Boot WebFlux项目中自定义Netty.在我的POM中,我添加了Spring Boot WebFlux和Spring Boot执行器依赖项.接下来,我按照春季文档. @Component public class NettyConfiguration implements WebServerFactoryCustomizer { @Override public void customize(NettyReactiveWebServerFactory factory) { factory.addServerCustomizers(new NettyCustomizer()); } } 然后,我在NetTycustomizer中实现了Netty引导: public class NettyCustomizer implements Netty
18 2023-09-15
编程技术问答社区
使用WebFlux和Spring Cloud时,如何用Netty替换Tomcat?
在使用WebFlux时如何摆脱Tomcat的一些文章,我仍然无法将Netty用作Tomcat的替代. 由于这是一个涉及带有父pom的不同模块等的项目.我将在此处发布指向回购的链接: https://github.com/deviad/clarity/clarity 让我知道是否还有更多文件等. 我感兴趣的模块是clarity-transaction-dispatcher. 我认为问题与我的中间软件(clarity-transaction-dispatcher)在某种级别上需要tomcat(某些传递依赖关系)有关的事实与春季云配置服务器进行交谈. 因此,我渴望知道这个问题是否有可能解决方案. 谢谢. 我尝试使用@webflux注释将tomcat从Maven的某些依赖项中排除,不包括SpringMVC自动配置. 我也尝试过: spring boot enable enable enable/disable嵌入式嵌入式tomcat带有个人资料 父
10 2023-09-15
编程技术问答社区
为什么spring webflux默认选择jetty,然后又失败了?
我正在尝试运行Spring Boot 2.0.0.m7的应用程序. 这是我在build.gradle中拥有的春季相关依赖项: compile "org.springframework.boot:spring-boot-starter-webflux:2.0.0.M7" compile "org.springframework.boot:spring-boot-starter-data-ldap:2.0.0.M7" compile "org.springframework.boot:spring-boot-starter-actuator:2.0.0.M7" 基于自动配置报告,是否可以说明为什么春季要使用码头作为反应性引擎(默认情况下,naker nef反应堆Netty是默认的引擎,符合弹簧文档) ) 春季启动自动配置报告(提取): ReactiveWebServerConfiguration.ReactorNettyAutoConfiguration:
2 2023-09-15
编程技术问答社区
反应堆Netty客户端如何在内部决定要使用的通道对象
我创建了一个HttpClient类的对象(来自反应堆netty jar),并使用此httpclient创建了一个Webclient类的对象(来自Spring WebFlux Jar)如下: HttpClient httpClient = HttpClient.create() .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 5000) .option(ChannelOption.SO_KEEPALIVE, true) .option(EpollChannelOption.TCP_KEEPIDLE, 300) .option(EpollChannelOption.TCP_KEEPINTVL, 60) .option(EpollChannelOption.TCP_KEEPCNT, 8) .doOnConnected(//custom s
4 2023-09-15
编程技术问答社区
在Spring reactive webclient中处理连接错误
我有一个弹簧网络电机,可以将HTTP调用到外部服务,并由反应性断路器工厂(RECILIENCE4J IMPH)支持.当客户端建立连接并失败响应(任何内部服务器或4xx错误)时,网络电视机和断路器的行为会如预期的那样.但是,如果客户端未能建立连接,则拒绝或未知主机,它开始分解. 我似乎无法在WebClient和触发断路器中捕获错误消息. 断路器永远不会打开并抛出TimeOutException. java.util.concurrent.TimeoutException: Did not observe any item or terminal signal within 1000ms in 'circuitBreaker' (and no fallback has been configured) . Web客户端的错误. io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection ref
6 2023-09-15
编程技术问答社区
Spring Webclient非阻滞客户端是吗?
我不了解反应性网络电量作品.它说Spring WebClient是非阻止客户端,但是此WebClient似乎从远程API中等待信号oncomplete(),然后可以处理从远程API发出的每个项目. 我希望当onnext()从目标api 发射onnext()时,网络电量器可以处理每个项目 我是春季Webflux世界的新手.我阅读了有关它的信息,并说它使用Netty作为默认服务器.使用Eventloop的网络.因此,要了解它的工作原理,我尝试创建2个小应用程序,客户端和服务器. 服务器应用仅返回简单通量,每个项目延迟1秒. 客户应用使用WebClient调用远程API. 服务器: @GetMapping(ITEM_END_POINT_V1) public Flux getAllItems(){ return Flux.just(new Item(null, "Samsung TV", 399.99), new Ite
14 2023-09-15
编程技术问答社区
反应性redis(生菜)总是发布到单线
IM使用弹簧Webflux(带有Spring-Reactor-netty)2.1.0.rc1和生菜5.1.1.Release. 当我使用反应性生菜API调用任何重新操作时,执行总是切换到同一单个线程(lettuce-nioeventloop-4-1). 这会导致性能差,因为所有执行都在该线程中被瓶颈瓶盖. 我知道我可以每次调用redis切换到另一个线程时都可以使用publishOn,但这很容易出错,但仍然不是最佳的. 有什么方法可以改进吗?我看到生菜提供了客户端质量类来自定义线程分配,但我找不到与Spring Webflux集成的方法. 此外,当前的行为对粗心的开发人员是否危险?也许应该对默认值进行调整.我想理想的情况是,如果生菜只能从webflux重复使用相同的事件循环. 我正在添加这个春季启动单类片段,可用于重现我的描述: @SpringBootApplication public class ReactiveApplication {
18 2023-09-15
编程技术问答社区
面对问题" WebClientRequestException:待处理队列已达到其最大尺寸为1000"
我正在运行微服务API的负载,该负载涉及使用Spring Reactive WebClient调用其他微服务API.我正在使用Postman Runner选项卡进行测试. 首先,我通过1500迭代运行负载,每次请求都会要求第二微服务,并且一切正常. 但是,当我使用5000迭代运行负载时,第二个微服务被要求使用3500次,并且由于发行 而失败了1500个电话. WebClientRequestException:未决的获取队列已达到其最大尺寸1000 使用org.springframework.web.reactive.functive.function.client.webclient带有默认配置,下面是代码片段. private WebClient webClient; @PostConstruct public void init() { this.webClient = WebClient.builder().defau
32 2023-09-15
编程技术问答社区