首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为反应性API构造定时器?

如何为反应性API构造定时器?
EN

Stack Overflow用户
提问于 2018-01-12 13:37:24
回答 1查看 372关注 0票数 2

在我的Java9SpringBoot 2应用程序中,我将同步RestTemplate调用的使用转换为异步WebClient调用。同步调用使用HdrHistogram进行计时,如下所示:

代码语言:javascript
复制
long sentAt = System.nanoTime();

try {
    ResponseEntity<Resource<Order>> response = restTemplate.exchange(
        url, 
        HttpMethod.POST, 
        request, 
        ORDER_PARAMETERIZED_TYPE
        );
} finally {
    histogram.recordValue(System.nanoTime() - sentAt);
}

每个异步调用站点都使用subscribe,因此我可以将这个计时块从实用程序代码移到应用程序代码中,但我真的想避免这种情况。

我想做这样的事情:

代码语言:javascript
复制
long sentAt = System.nanoTime();

return webClient.post()
    .uri("/orders")
    .body(BodyInserters.fromObject(order))
    .retrieve()
    .bodyToMono(ORDER_PARAMETERIZED_TYPE)
    .doFinally(r -> histogram.recordValue(System.nanoTime() - sentAt))
    ;

但是doOnSuccess调用(需要sentAt值)中的直方图没有记录任何值。

那么,为响应性API执行这种定时器拦截的“正确方法”是什么呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-12 17:01:35

TLDR

代码语言:javascript
复制
long sentAt = System.nanoTime();

return webClient.post()
    .uri("/orders")
    .body(BodyInserters.fromObject(order))
    .retrieve()
    .bodyToMono(ORDER_PARAMETERIZED_TYPE)
    .doFinally(r -> histogram.recordValue(System.nanoTime() - sentAt))
    ;

详细信息

实际上,它与问题中所写的一样工作,但是数据出现在HdrHistogram中需要几毫秒时间。可悲的是,这花了我几个小时的discover...hopefully --你会过得更好的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48227418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档