gpt4 book ai didi

quarkus - Mutiny Uni 转换为原始类型

转载 作者:行者123 更新时间:2023-12-02 18:31:35 26 4
gpt4 key购买 nike

到目前为止,我已经在 Quarkus 中使用 smallrye Mutiny 完成了非常基本的工作。基本上,我有一个或两个非常小的网络服务,它们只与网络应用程序交互。这些服务返回 Uni<Response> .

现在我正在编写一个日志记录服务,我希望我的其他人向其传递信息。在此日志记录服务中,我需要向调用服务返回一个值。日志记录服务会将此值作为 Uni<Integer> 返回.我正在努力解决的问题是如何将调用服务中的返回值提取为 int。 .

这是日志服务中的函数

    @GET
@Path("/requestid")
@Produces(MediaType.TEXT_PLAIN)
public Uni<Integer> getMaxRequestId(){
return service.getMaxRequestId();
}

public Uni<Integer> getMaxRequestId() {
Integer result = Integer.valueOf(em.createQuery("select MAX(request_id) from service_requests").getFirstResult());

if(result == null) {
result = 0;
}
return Uni.createFrom().item(result += 1);
}

这是调用服务中的客户端代码

@Path("/requests")
public class RequestIdResource {

@RestClient
RequestIdServices service;

@GET
@Path("/requestid")
@Produces(MediaType.TEXT_PLAIN)
public Uni<Integer> getMaxRequestId(){
return service.getMaxRequestId();
}
}

public void filter(ContainerRequestContext requestContext) throws IOException {

int requestid = client.getMaxRequestId();

rm.name = ConfigProvider.getConfig().getValue("quarkus.application.name", String.class);
rm.server = requestContext.getUriInfo().getBaseUri().getHost();
rm.text = requestContext.getUriInfo().getPath(true);
rm.requestid = requestid;

}

基本上我所尝试的一切都会创建另一个 Uni .也许我只是错误地使用了这个概念。但是我如何获得 Integer来自 Uni这样我就可以得到 intValue

最佳答案

您需要调用终端操作,或使用该值并继续链。

如果您想调用终端操作符,您可以调用await 操作来使您的代码阻塞并等待响应。

如果您想将此响应式调用与客户端代码中存在的另一个调用合并,您可以使用 combine 方法加入或组合您的实际 Mutiny 流与来自响应的 on。

如果您只想使用该值而不检索它,您可以suscribe并得到结果。

如果你有一个 multi 你可以直接调用方法 toList

假设您想要涉及一些超时并且想要获得实际的整数,您可以使用 await 方法和超时。

关于quarkus - Mutiny Uni 转换为原始类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69346708/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com