首页 > 解决方案 > rxjava2 与 Spring Boot 2

问题描述

我正在使用带有 spring boot 2 和 spring cloud finchley.rc2 的 rxjava 2。

现在我正在使用 sleuth / zipkin 跟踪请求。但是我遇到了一个问题,即 IO 线程正在重用 olds 请求 traceid。

当我这样做时,生成的 traceid 很好(对于同一请求中的所有并行调用都相同)

Observable<Optional<String>> data = client.getWorld().subscribeOn(Schedulers.newThread());
        Observable<Optional<String>> data1 = client.getWorld1().subscribeOn(Schedulers.newThread());
        Observable<Optional<String>> data2 = client.getWorld1().subscribeOn(Schedulers.newThread());
        Observable<Optional<String>> data3 = client.getWorld().subscribeOn(Schedulers.newThread());

但是当我这样做时,它无法正常工作。我假设由于 io() 线程被重用,这就是为什么它们使用旧数据,因为它们是旧线程?但是我怎样才能强制他们使用当前主线程的跟踪 ID?

    Observable<Optional<String>> data = client.getWorld().subscribeOn(Schedulers.io());
    Observable<Optional<String>> data1 = client.getWorld1().subscribeOn(Schedulers.io());
    Observable<Optional<String>> data2 = client.getWorld1().subscribeOn(Schedulers.io());
    Observable<Optional<String>> data3 = client.getWorld().subscribeOn(Schedulers.io());

我怎样才能解决这个问题?我无法移动 webflux,因为我有很多用 rxjava 编写的代码?

标签: rx-java2spring-cloud-sleuth

解决方案


推荐阅读