标签:reactive-programming spring spring-integration spring-webflux
SI 5支持WebFlux,这意味着我们现在可以构建一个被动消息传递系统.但是,这也意味着需要考虑设计,并且通常的错误处理方法不起作用.在响应流中,消息是发布者(Flux),它不会抛出异常,但会发出错误通知.因此,在消息上设置的错误通道标头是无用的,因为SI不知道Flux导致错误.
请考虑以下代码:
.handle(WebFlux.outboundGateway(m -> m.getPayload().toString(), webClient)
.expectedResponseType(YelpRecord.class)
.httpMethod(GET)
.mappedRequestHeaders(ACCEPT)
.replyPayloadToFlux(true))
.handle((GenericHandler<Flux<YelpRecord>>) (flux, headers) ->
flux
.doOnError(t -> log.error(t.getMessage(), t))
.doAfterTerminate(() ->
log.info("Completed streaming from: {}.", headers.get(DOWNLOAD_URI_HEADER))
)
.onBackpressureBuffer(
yelpArtifactoryProperties.getOnBackpressureBufferSize(),
BufferOverflowStrategy.ERROR)
)
上面的代码片段中缺少的是将异常发送到来自doOnError的消息上配置的错误通道.我们怎么做?
解决方法:
((MessageChannel)header.getErrorChannel()).send(…)在.doOnError()中为你工作吗?
关键是你是正确的,消息有效负载中的Flux已经不受框架的控制,如果你想处理它的错误,你必须自己做.这已经是你的代码与doOnError()因此框架无法帮助你已经自动化的东西.
标签:reactive-programming,spring,spring-integration,spring-webflux 来源: https://codeday.me/bug/20190701/1347846.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。