问题标签 [spring-webflux]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
11106 浏览

spring - Spring 5 Reactive 在扩展 Flux/实现 Publisher 并多次调用 s.onNext() 时失败

我刚开始使用新的 Spring 5 响应式支持并想模拟一些异步数据生成,注意到两个错误行为:

1) 多次调用 s.onNext(String):

在这种情况下,堆栈跟踪是:

2) 多次调用 s.onNext(Alert.class -any DTO-):

现在它不会在日志上显示任何错误,但调用者会收到 500 响应代码和内容 '['

日志:

为什么我们不能多次调用 onNext() ?我们怎么能这样做?

注意:我只要调用onNext一次就可以了:

或者

0 投票
1 回答
401 浏览

spring - Spring 5 M2 - 反应式 - 序列化 ServerSentEvent 时出错

从 Spring 5.0.0 M1 升级到 M2 后,此代码已停止工作(我从更改SseEventServerSentEvent类):

例外是:

0 投票
1 回答
4351 浏览

spring - Spring 5 Web Reactive - 热发布 - 如何使用 EmitterProcessor 将 MessageListener 桥接到事件流

示例项目位于此处:https ://github.com/codependent/spring5-playground

我想将从 JMS 队列接收到的消息桥接到响应式控制器中,该控制器会将消息作为事件流发布。

我不希望重播消息,也就是说,如果消息到达并且没有任何订阅者,我不希望在任何订阅者稍后发送它们,所以我使用的是 EmitterProcessor:

这是我的消息监听器:

最后是我的休息控制器:

为了测试它的行为,我添加了这个控制器方法来模拟插入队列:

启动应用程序后立即加载http://localhost:8080/accounts/1/alerts/live2,浏览器等待数据。

然后我发布一些消息http://localhost:8080/mock/accounts/1/alerts/put

但是没有人进入浏览器。这最终以 500 错误(无日志)结束。

经过一些手动重试后,它开始接收数据......

...但很多时候它没有得到任何东西。

0 投票
2 回答
18205 浏览

java - Reactive Spring 不支持 HttpServletRequest 作为 REST 端点中的参数?

我创建了一个看起来像这样的 RestController:

不幸的是,当我尝试点击“问候”端点时,我得到了一个例外:

java.lang.IllegalStateException:[org.apache.catalina.servlet4preview.http.HttpServletRequest] 类型的参数 [0] 没有解析器

我在用

如何解决这个问题?

链接到完整的堆栈跟踪。链接到 build.gradle

- - - - - 编辑 - - - - -

使用界面。现在得到:

java.lang.IllegalStateException:方法上类型 [javax.servlet.http.HttpServletRequest] 的参数 [0] 没有解析器(其余部分相同)

0 投票
2 回答
1031 浏览

java - Spring http/web forward 不能与 spring-reactive 一起使用

我正在尝试将请求从一个控制器转发到另一个控制器,但我却遇到了异常

java.lang.IllegalStateException:无法解析名称为“forward:/test2”的视图。在 org.springframework.web.reactive.result.view.ViewResolutionResultHandler.lambda$resolveViews$5(ViewResolutionResultHandler.java:272) ~[spring-web-reactive-5.0.0.BUILD-SNAPSHOT.jar:5.0.0.BUILD-快照]

这是我的控制器:

我正在使用弹簧引导

0 投票
2 回答
859 浏览

java - spring-boot-starter-web-reactive + spring-boot-starter-actuator 不能一起工作?

我尝试了 spring-boot-starter-actuator,默认情况下,在 pom 中添加到 spring boot 项目中,它可以正常工作。

一旦我添加 spring-boot-starter-web-reactive 一切都崩溃了,新创建的响应式端点工作,但执行器停止工作,有人遇到过这样的问题,也许已经有任何想法如何解决它?还注意到,我以前工作过的 h2 /console 也坏了。

我没有收到任何错误,没有例外,这些东西只是停止工作。

0 投票
2 回答
9395 浏览

spring - 让 HTTP 端点返回 Flux/Mono 实例而不是 DTO 的好处

我看过Spring Tips: Functional Reactive Endpoints with Spring Framework 5.0并阅读了一些关于 spring reactor 的内容,但我不太明白。

鉴于我已经激活了 netty 和 spring reactor ,让端点返回Flux/实例(杰克逊化)而不是直接 dto 对象(杰克逊化)有什么好处?Mono我最初假设反应流在 http 请求/响应上下文中的工作方式更像 websockets,其中服务器使用开放通道将数据推送到接收器,但情况似乎并非如此。

另外,netty 在反应式编程中实际上比 tomcat 做得更好吗?

如果这些问题看起来很愚蠢,我很抱歉,但我不太明白这个新框架方向的目的。为什么会出现,它是如何工作的,它解决了什么问题?

0 投票
2 回答
9264 浏览

spring - Spring 5 Web Reactive - How can we use WebClient to retrieve streamed data in a Flux?

The current milestone (M4) documentation shows and example about how to retrieve a Mono using WebClient:

How can we get streamed data (from a service that returns text/event-stream) into a Flux using WebClient? Does it support automatic Jackson conversion?.

This is how I did it in a previous milestone, but the API has changed and can't find how to do it anymore:

0 投票
2 回答
7367 浏览

java - Spring 5 的真实控制器示例:Web Reactive

我想参与 Spring 的反应式编程世界。正如我所意识到的,它让我可以在两种不同的范式之间进行选择:基于注释的(我们熟知的@Controller@RequestMapping和反应式的(旨在解决“注释地狱”)。

我的问题是缺乏对典型反应式控制器的理解。我可以在我的控制器类中使用三个概念接口:

HandlerFunction<T>(1) - 我为每个ServerRequest 返回具体HandlerFunction<T>实例的特定方法定义一个方法,然后将这些方法注册到路由器。正确的?

RouterFunction(2) 和FilterFunction(3) - 是否有一个特定的位置应该放置所有RequestPredicate具有相应s 的 s?HandlerFunction或者我可以在每个控制器中单独做(就像我以前用注释方法做的那样)?如果是这样,那么如何通知全局处理程序(路由器,如果有的话?)从这个控制器应用这个路由器部分?

这就是我现在看到反应式控制器“模板”的方式:

最后,如何说它是一个控制器,而不用注释标记它?

我已经阅读了官方博客上的 Spring 参考资料和所有与此问题相关的帖子。有很多示例,但是所有示例都脱离了上下文(恕我直言),我无法将它们组装成完整的图片。

如果您能提供一个真实的示例和如何组织这些功能之间的交互的良好实践,我将不胜感激。

0 投票
1 回答
134 浏览

spring - 找不到弹簧控制器

我正在尝试使用 spring web 响应式创建一个 RESTful 服务。我有一个具有通常结构的控制器

我正在使用@ComponentScan 让控制器像这样注册

我的 ServerInitialization 类中的各种 bean 正在被定义,所以我知道 Spring 正在处理 ServerInitialization。

我想知道问题是否可能与我启动 Spring 和 HttpServer 的方式有关:

当我尝试对此进行测试时,我使用 url http://localhost/api/v1/registrar/enroll。它返回一个 404。

如果我应该以不同的方式开始我的服务,有人可以指点我一个很好的完整工作示例吗?