标签: vert.x-webclient

两个 Quarkus 服务之间的非阻塞数据流(Vert.x 和 Java 中的 Mutiny)

更新!

在解决了一些与主要问题无关的问题后,我修复了示例代码中的小错误,主要问题仍然是关于服务之间的非阻塞流。

背景资料

我正在 Quarkus 下移植 Spring WebFlux 服务。该服务对多个庞大数据集运行长时间搜索,并在可用时以 Flux(文本/事件流)形式返回部分结果。

问题

现在,我尝试在 Quarkus 下将 Mutiny Multi 与 Vert.x 结合使用,但无法弄清楚消费者服务如何在不阻塞的情况下接收此流。

在所有示例中,消费者要么是 JS 前端页面,要么生产者的内容类型是 application/json,在将其发送到一个 JSON 对象之前,它似乎会一直阻塞,直到 Multi 完成(这在我的应用程序中没有任何意义)。

问题

  1. 如何使用 Mutiny 风格的 Vert.x WebClient 接收文本/事件流?
  2. 如果问题是 WebClient 无法接收连续流:在两个 Quarkus 服务之间传输数据的标准方法是什么?

这是一个简化的例子

测试实体

public class SearchResult implements Serializable {

    private String content;

    public SearchResult(String content) {
        this.content = content;
    }


    //.. toString, getters and setters
    
}
Run Code Online (Sandbox Code Playgroud)

生产者 1. 简单的无限流 -> 挂起

@GET
@Path("/search")
@Produces(MediaType.SERVER_SENT_EVENTS)
@SseElementType(MediaType.APPLICATION_JSON)
public Multi<SearchResult> getResults() { …
Run Code Online (Sandbox Code Playgroud)

java event-stream quarkus vert.x-webclient mutiny

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

标签 统计

event-stream ×1

java ×1

mutiny ×1

quarkus ×1

vert.x-webclient ×1