在前端Vue应用程序中使用SmallRye Mutiny

iq3niunx  于 2023-02-24  发布在  Vue.js
关注(0)|答案(1)|浏览(148)

我正在使用Java Quarkus应用程序连同基于Quarkus指南的SmallRye Mutiny:https://quarkus.io/guides/mutiny-primer
我创建的Rest端点如下所示:

@GET
    @Path("/data")
    @APIResponse(
      responseCode = "200",
      description = "Return data",
      content = @Content(
        mediaType = MediaType.APPLICATION_JSON,
        schema = @Schema(type = SchemaType.OBJECT, implementation = HashMap.class)
      )
    )
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
    Multi<Map> data();

我在前端使用Vue框架和axios,我设法从后端获得数据作为Map数组,但数据只有在过程完成时才返回。我希望在一些东西被推送到Multi(如订阅者)后立即将它们放在前端。有什么想法如何实现这一点?
我不知道如何处理这个问题。我试过rxjs和vue-socket.io但没有运气,不确定这是不适用的解决方案还是无法正确配置。

mwkjh3gx

mwkjh3gx1#

对于未来的求职者,下面是如何让它工作:

**在 java **

@GET
@Path("/data")
@APIResponse(
        responseCode = "200",
        description = "Return data",
        content = @Content(
                mediaType = MediaType.APPLICATION_JSON,
                schema = @Schema(type = SchemaType.OBJECT, implementation = Multi.class)
        )
)
@Produces(MediaType.SERVER_SENT_EVENTS)
@RestStreamElementType(MediaType.APPLICATION_JSON)
@RolesAllowed(Tenant.DEFAULT_ROLE)
Multi<Map> data(@Context SecurityContext ctx);

视图中:

使用event-source-polyfill,然后:

import { EventSourcePolyfill } from "event-source-polyfill";
const eventSource = new EventSourcePolyfill(`localhost:8080/data`, {
   headers: { Authorization: "Bearer " + "YOUR_TOKEN" }
});
eventSource.addEventListener("message", event => {
   //consume message
});

相关问题