到目前为止,我已经在 Quarkus 中使用 smallrye Mutiny 完成了非常基本的事情。基本上,我有一两个非常小的 Web 服务,它们只与 Web 应用程序交互。这些服务返回一个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
呢?