问题描述
在 Quarkus 上,我尝试构建一个具有动态 baseUrl 的反应式微配置 REST 客户端,但到目前为止,在所有实现变体中,REST 调用在订阅后都被阻止。有趣的是,非反应式实现就像一个魅力。让我们看看一些代码...
REST 客户端界面:
Worker
夸库斯测试:
package ...;
import io.smallrye.mutiny.Uni;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Response;
import java.io.InputStream;
import java.util.concurrent.CompletionStage;
import static javax.ws.rs.core.MediaType.APPLICATION_OCTET_STREAM;
@Path("")
public interface RetrievalRestApi {
@GET
@Produces(APPLICATION_OCTET_STREAM)
Uni<InputStream> retrieve();
@GET
@Produces(APPLICATION_OCTET_STREAM)
InputStream retrieve2(); // non-reactive,the only one that works...
@GET
@Produces(APPLICATION_OCTET_STREAM)
Uni<Response> retrieve3();
@GET
@Produces(APPLICATION_OCTET_STREAM)
CompletionStage<InputStream> retrieve4();
}
运行 4 个测试时,只有使用非响应式 API 的 testRetrieve2 成功。所有其他人都挂在 AssertSubscriber.await() 中。
有什么想法吗?
解决方法
问题确实与https://github.com/quarkusio/quarkus/issues/13440有关。将 Quarkus 升级到 1.12.0.Final 后,问题消失了。