# Mannual propagation of tracing context for Webflux
* Dependency the toolkit, such as using maven or gradle
```xml
org.apache.skywalking
apm-toolkit-webflux
${skywalking.version}
```
* usage 1.
```java
@GetMapping("/testcase/annotation/mono/onnext")
public Mono monoOnNext(@RequestBody(required = false) String body) {
return Mono.subscriberContext()
.flatMap(ctx -> WebFluxSkyWalkingOperators.continueTracing(ctx, () -> {
visit("http://localhost:" + serverPort + "/testcase/success");
return Mono.just("Hello World");
}));
}
```
* usage 2.
```java
@GetMapping("/login/userFunctions")
public Mono> functionInfo(ServerWebExchange exchange, @RequestParam String userId) {
return ReactiveSecurityContextHolder.getContext()
.flatMap(context -> {
return exchange.getSession().map(session -> WebFluxSkyWalkingOperators.continueTracing(exchange, () -> handle(session, userId)));
});
}
private Response handle(WebSession session, String userId) {
//...dubbo rpc
}
```
* usage 3.
```java
Mono.just("key").subscribeOn(Schedulers.boundedElastic())
.doOnEach(WebFluxSkyWalkingOperators.continueTracing(SignalType.ON_NEXT, () -> log.info("test log with tid")))
.flatMap(key -> Mono.deferContextual(ctx -> WebFluxSkyWalkingOperators.continueTracing(Context.of(ctx), () -> {
redis.hasKey(key);
return Mono.just("SUCCESS");
})
));
...
```
_Sample codes only_