小编Jav*_*vaD的帖子

我可以使用Spring WebFlux来实现通过Kafka请求/响应主题获取数据的REST服务吗?

我正在开发 REST 服务,该服务反过来会查询缓慢的遗留系统,因此响应时间将以秒为单位。我们还期望大量负载,因此我正在考虑异步/非阻塞方法,以避免数百个“servlet”线程在调用慢速系统时被阻塞。

据我所知,这可以使用新 servlet API 规范中存在的 AsyncContext 来实现。我什至开发了一个小型原型,它似乎正在工作。

另一方面,看起来我可以使用 Spring WebFlux 实现相同的目标。不幸的是,我没有找到任何使用 Mono/Flux 包装自定义“后端”调用的示例。大多数示例只是重用已经准备好的反应式连接器,例如 ReactiveCassandraOperations.java 等。

我的数据流如下:

JS 客户端 --> Spring RestController --> 向 Kafka 主题发送请求 --> 从 Kafka 回复主题读取响应 --> 返回数据给客户端

我可以将 Kafka 步骤封装到 Mono/Flux 中吗?如何做到这一点?我的 RestController 方法应该是什么样子?

这是我的简单实现,它使用 Servlet 3.1 API 实现了相同的效果

//took the idea from some Jetty examples
public class AsyncRestServlet extends HttpServlet {
...
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    String result = (String) req.getAttribute(RESULTS_ATTR);

    if (result == null) { …
Run Code Online (Sandbox Code Playgroud)

spring reactive-programming apache-kafka spring-boot spring-webflux

5
推荐指数
1
解决办法
2447
查看次数