从一个夸克斯(kotlin)应用程序中,我并行请求多个endpoint(相同的endpoint,但有不同的基本网址),然后我合并uni,以便不依次等待每个响应。
以下是一个示例:
val unis = repository.findUnis()
?.sites
?.map { site ->
RestClientBuilder.newBuilder()
.baseUri(URI.create(site.url))
.build(MyClientService::class.java)
.api("param")
.ifNoItem()
.after(Duration.ofMillis(1))
.recoverWithItem(null)
.onFailure()
.invoke {
logger.info("Error while connecting to ${site.url}", it)
}
.onFailure()
.recoverWithItem(null as? String)
}
return Uni.combine().all().unis<String>(unis)
.combinedWith { it as (List<String?>?) }
.await().atMost(Duration.ofMillis(1))
?.filterNotNull()
我遇到的问题是,在超时的情况下不使用ifNoItem
。如果单个uni需要超过1毫秒(此值仅用于测试...),则最后一个块将在cominedwith(...). wait()
处抛出TimeoutExc0019。
我想在单个uni级别处理超时,并且将此错误视为失败(并记录和恢复)。但这似乎行不通。我的实现来自https://smallrye.io/smallrye-mutiny/#_how_do_i_handle_timeout)。
如何做好这件事?
而不是。ifNoItem()。在(百万分之一的持续时间)之后。recoverWithItem(null)
,使用:。ifNoItem()。之后(持续时间)。百万(1)。fail()
,它将传播故障。
我在Quarks应用程序中使用Smallrye Mutiniy反应库,因为它在Quarks应用程序中本机受支持。 我正在尝试为服务类编写单元测试。我不确定如何为返回Uni/Multi的方法编写单元测试。 一种返回Uni的方法 为上述方法实施的单位 控制台日志
到目前为止,我在夸克斯的斯莫尔黑伊叛变中做了非常基本的事情。基本上,我有一两个非常小的web服务,它们只与web应用程序交互。这些服务返回一个
当我到达endpoint时,我会得到这个资源: 这是我的代码: 这些是我的quarkus项目依赖项: 有什么想法吗?
寻找一种干净的方法来将源代码转换为在一段时间内不发出项后发出单个(或哨兵值)。 例如,如果源observable发出,然后在发出之前停止发出10秒,我希望发出的项为。 我研究了运算符,但是当超时发生时,它会终止,这是不希望的。 使用RXJava。
最近,我正在从事一个项目,其中我有2个同时进行2个异步调用。由于我与Quarkus合作,我最终尝试利用叛变和垂直。x库。然而,我无法让我的代码与Unis一起工作。在下面的代码中,我可以想象两个Uni都将被调用,返回速度最快的Uni将被返回。然而,当组合uni时,似乎只返回列表中的第一个uni,即使第一个uni需要更长的时间。 由于uniFast应该首先完成,所以下面的代码应该在打印时打印出来。如何
我已经有这个错误几天了,不能打开任何项目,甚至不能创建新的项目。我不明白我在网上找到的解决方案,我已经恢复了Android Studio,只是再次出现同样的错误。请帮帮我.我用的是Windows10。