我正在使用spring webflux通过Schudters.elastic()从另一个服务调用另一个服务。
Mono<Integer> anaNotificationCountObservable = wrapWithRetryForFlux(wrapWithTimeoutForFlux(
notificationServiceMediatorFlux.getANANotificationCountForUser(userId).subscribeOn(reactor.core.scheduler.Schedulers.elastic())
)).onErrorReturn(0);
在主线程中,我设置了一个InhertitableThreadlocal变量,在子线程中,我试图访问它,它工作正常。
这是我的线程本地存储类
@Component
public class RequestCorrelation {
public static final String CORRELATION_ID = "correlation-id";
private InheritableThreadLocal<String> id = new InheritableThreadLocal<>();
public String getId() {
return id.get();
}
public void setId(final String correlationId) {
id.set(correlationId);
}
public void removeCorrelationId() {
id.remove();
}
}
现在的问题是它第一次工作正常,这意味着我在threadlocal中设置的值被传递给了其他服务。
但第二次,它也使用了旧id(在上次请求中生成)。
我尝试使用Schedulers.newSingle()而不是弹性(),那么它的工作正常。所以想想既然弹性()是重用线程,这就是为什么它不能清除/或它是重用的。
我应该如何解决问题。我在我的过滤器中设置线程本地,并在我的文件中清除相同的内容
requestCorrelation.setId(UUID.randomUUID().toString());
chain.doFilter(req,res)
requestCorrelation.removeCorrelationId();
在利用反应器管道时,切勿将资源或信息绑定到特定线程。Reactor本身是调度不可知的;使用您的库的开发人员可以选择在另一个调度程序上安排工作 - 如果您决定强制使用调度模型,则可能会失去性能优势。
相反,您可以在Reactor上下文中存储数据。这是一个类似地图的结构,与订阅者相关联,独立于调度安排。
这就是spring security和micrometer等项目存储通常属于本地线程的信息的方式。
Project Reactor很棒,我可以很容易地切换一个线程来处理另一个线程上的某些部分,但我已经查看了schedulers.fromExecutorService()方法,该方法每次都会分配新的ExecutorService。因此,当调用此方法时,总是会创建调度器并再次分配调度器。我不确定,但我认为这可能会导致内存泄漏... 我想知道如何将调度器注册为bean,它单例所以只会分配一次,而不是每
问题内容: 我有一个容器用。它有一个孩子。 我怎样才能使孩子显得“内联”? 具体来说,如何使孩子的宽度取决于其内容,而不扩展到父母的宽度? 我试过的 我将孩子设置为,但仍然占用了整个宽度。我还尝试了所有其他显示属性,但没有任何效果。 例: 问题答案: 使用的容器上,或在柔性的项目。 不需要。 flex容器的初始设置为。这意味着柔性物品将沿横轴扩展以覆盖容器的整个长度。 该属性的作用与之相同,除了适
我有一个容器 ,其中 。它有一个子 。 怎样才能让孩子显得“内联”呢? 具体地说,我如何使孩子的宽度由它的内容决定,而不是扩展到父母的宽度? 我所尝试的: 我将子项设置为,但它仍然占用了整个宽度。我也尝试了所有其他显示属性,但都没有效果。 示例: null null http://codepen.io/donpinkus/pen/ygrxry 共2个答案 匿名用户 在容器上使用或在弹性项上使用。
如果我调整窗口的大小小于最小宽度flex项目的总数(此处为653px),则会出现一个滚动条,但flexbox采用当前窗口的大小,并且flex项目没有红色背景,我想知道如何在不键入以下特定值的情况下为flexbox容器设置最小宽度: 我不希望收缩flex项目,但一个css的方式来获得: flexbox.min(flex_items_min_width) https://codepen.io/papa
问题内容: 如果您看下面的示例,我希望标头()在父容器内具有相同的长度。 但是我并没有成功实现这一目标。 任何帮助表示赞赏。 问题答案: 弹性盒法 为了使文本项()的宽度相等,您需要使用已完成的。这和说的一样。 但是,由于两个原因,这本身无法实现目标: 默认情况下,flex容器的父级,但更大容器中的flex项,仅限于其内容的宽度。因此它不会扩展,文本可能会溢出容器。你需要申请到,也是如此。 默认情
问题内容: 我想展示水平系列的未知数量的纸牌。为此,如果太多,它们将必须重叠。我很难说服伸缩盒在不缩小卡片的情况下重叠卡片。下面的示例缩小卡片。我尝试过,但后来没有受到尊重。 问题答案: 这就是我使用flexbox做到的方式。 请注意,从技术上讲,卡并不是重叠的,它们只是被剪裁了。但是它们 看起来 像是重叠的。诀窍是将每张卡包裹在另一个带有溢出的元素中:隐藏。 包装元素将缩小以适应可用空间,并且在