Reactor3 功能介绍二十六: Context

在响应式编程的异步场景中,线程可能处理多个订阅关系,线程间上下文变量的传播是个挑战。本文通过示例介绍了Reactor3的Context如何在不同线程间传递,包括简单的使用方法、源码解析以及一个复杂案例的分析,帮助理解在Reactor中如何管理和传递上下文信息。
摘要由CSDN通过智能技术生成

在响应式编程中,一个线程很可能被用于处理多个异步订阅关系, 同样,一个订阅关系在元素下发的过程中往往可能从一个线程切换到另一个线程。那么上下文变量如何传播呢?

首先来看一个Context的简单用法:

		//案例一
        String key = "message";
        Mono.subscriberContext() 
			.map( ctx -> "Hello " + ctx.get(key))
			.subscriberContext( ctx -> ctx.put(key, "World")) //订阅上下文,核心操作
			.subscribe(System.out :: println);

输出结果: 

Hello World

源码剖析:

subscriberContext(带参的)操作对应的productor是MonoSubscriberContext,下面来看一下MonoSubscriberContext#subscribeOrReturn(生成Context的地方)

	public CoreSubscriber<? super T> subscribeOrReturn(CoreSubscriber<? super T> actual) {
		//重点在这里,生成了所需的Context,并保存在消费者ContextStartSubscriber中
        Context c = doOnContext.apply(actual.currentContext());

		return new FluxContextStart.ContextStartSubscriber<>(actual, c);
	}

subscriberCon

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值