我对反应性非常陌生,所以在范式转变中有点挣扎,但是也许有人能帮我克服这个问题?
我的控制器将Mono(称为“limit”)作为服务参数传递给我的服务。Mono在subscribe上发出一个整数,服务使用该整数执行其工作,该整数返回一个流量。
在我的服务方法中,我需要订阅mono,但我需要在我的服务方法(对其他endpoint进行web客户端REST调用)之前订阅mono,因为REST调用中需要限制值。现在,我知道订阅将在某个点完成,但它是在主线程继续完成方法之后完成的。我的代码:
public Flux<User> getUserdata(Mono<Integer> limit) {
return
Flux.from(WebClient.create()
.get()
.uri(uriBase, uri -> {
uri.queryParam("_limit", limit.subscribe(k -> String.valueOf(k)));
})
.accept(MediaType.APPLICATION_JSON)
.retrieve()
.bodyToFlux(User.class));
}
如果我硬编码limit参数,这就行了。我需要有人确保订阅已完成。我知道我仍然对sync/async有点混淆,所以关于如何反应性地/正确地做到这一点,有什么想法/建议吗?
蒂亚,
彼得
Mono
和Flux
是制作人
。订阅的用户称为
消费者
。在您的情况下,最终的消费者可能就是发起呼叫的消费者。很可能是一个网页,或另一个调用您的服务的服务。
我的意思是,既然你是
制作人
,你就不应该打电话给订阅
,因为你不是最终的消费者
。一旦你看到自己在做这件事,你就会知道这是一种代码气味。
我在下面重写了您提供的示例,并提供了一些注释。
public Flux<User> getUserdata(Mono<Integer> limit) {
// Should be created in a @Configuration annotated, as a
// @Bean WebClient is quite a large class and can affect performance.
final WebClient webclient = WebClient.create();
// We flatMap incoming mono to get the value, and then
// call webClient, bodyToFlux returns a Flux for us.
return limit.flatMap(l -> webClient.get()
.uri(uriBase, uri -> {
uri.queryParam("_limit", String.valueOf(l))
.build());
})
.accept(MediaType.APPLICATION_JSON)
.retrieve()
.bodyToFlux(User.class));
}
我尝试使处理程序和路由器类的Spring引导webflow。模型类是用户类。代码是 下面是webflux项目的处理程序类。在register方法中,我编写了id复制测试代码。但这是完全错误的。 我想提取的用户名或id字符串从Mono的Spring webflow.将需要任何评论。我被这部分卡住了。
我有一个接受Mono作为参数的方法。我只想从中得到实际的字符串。Googled但是除了调用Mono对象上的block(),没有找到答案,但是它会进行阻塞调用,所以要避免使用block()。如果可能的话,请建议其他方法。我之所以需要这个字符串,是因为在这个方法中,我需要用实际的字符串值调用另一个方法,比如print()。我明白这很容易,但我是反应性编程的新手。 代码:
对于反应编程和尝试通过WebFlux和WebClient创建反应服务是新的。 方法的流程类似于 发布请求并等待返回响应 映射服务的响应体(具有其他业务逻辑),并返回建议类型 创建ResponseEntity 创建Mono 类型的Mono
所以我使用executorservice创建了一个线程池。 我试图访问线程池队列中的任务数。我看到没有办法得到它。我知道有一些方法来获取线程池执行器中的队列大小,但是我如何使用执行器服务对象来实现这一点。 就像我说的,如果我创建了一个像这样的线程池执行器,我可以得到队列信息 我知道我可以使用tpExecutor。队列size()获取线程池队列中的任务数。但目前我已经使用Executor服务声明了我
嗨,我尝试用InMemoryDao获取userDetailsService。但是我得不到,我试过@Autowired,@ Inject(userdailsservice,InMemoryDaoImpl,InMemoryManager...)但是我不能让它工作。 有公共类安全扩展WebSecurityC 只尝试了WebSecurityCon
我需要能够在运行时告诉kotlin集合的泛型类型。我怎么做?