Mutiny Uni 转换为原始类型
Mutiny Uni Convert to Primitive Type
到目前为止,我已经在 Quarkus 中使用 smallrye Mutiny 完成了非常基本的操作。基本上,我有一个或两个非常小的网络服务,它们只与网络应用程序交互。这些服务 return 一个 Uni<Response>
.
现在我正在编写一个日志记录服务,我希望我的其他人将信息传递给它。在此日志记录服务中,我需要 return 调用服务的值。日志记录服务将 return 这个值作为 Uni<Integer>
。我正在努力解决的问题是如何将调用服务中的 return 值提取为 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
。也许我只是错误地使用了这个概念。但是如何从 Uni
中获取 Integer
以便获取 intValue
?
您需要调用终端操作,或使用该值并继续链。
如果您想调用终端操作员,您可以调用 await
操作来使您的代码阻塞并等待响应。
如果您想将此反应式调用与客户端代码中存在的另一个反应式调用合并,您可以使用 combine
方法加入或组合您的实际 Mutiny 流与来自响应的 on。
如果您只想使用该值而不检索它,您可以suscribe并获取结果。
如果你有 multi 你可以直接调用方法 toList
假设您想要涉及一些超时并且想要获得实际的整数,您可以使用 await
方法和超时。
到目前为止,我已经在 Quarkus 中使用 smallrye Mutiny 完成了非常基本的操作。基本上,我有一个或两个非常小的网络服务,它们只与网络应用程序交互。这些服务 return 一个 Uni<Response>
.
现在我正在编写一个日志记录服务,我希望我的其他人将信息传递给它。在此日志记录服务中,我需要 return 调用服务的值。日志记录服务将 return 这个值作为 Uni<Integer>
。我正在努力解决的问题是如何将调用服务中的 return 值提取为 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
。也许我只是错误地使用了这个概念。但是如何从 Uni
中获取 Integer
以便获取 intValue
?
您需要调用终端操作,或使用该值并继续链。
如果您想调用终端操作员,您可以调用 await
操作来使您的代码阻塞并等待响应。
如果您想将此反应式调用与客户端代码中存在的另一个反应式调用合并,您可以使用 combine
方法加入或组合您的实际 Mutiny 流与来自响应的 on。
如果您只想使用该值而不检索它,您可以suscribe并获取结果。
如果你有 multi 你可以直接调用方法 toList
假设您想要涉及一些超时并且想要获得实际的整数,您可以使用 await
方法和超时。