gpt4 book ai didi

spring - 如何使用 Spring EventListener 进行 sendAndReceive ?

转载 作者:行者123 更新时间:2023-12-02 05:14:41 24 4
gpt4 key购买 nike

使用来自project-reactor的(同时已弃用的)reactor-bus,我拥有了API eventBus.sendAndReceive(Event e, Consumer<?> callback) .

这允许通过发布事件来触发执行并自动订阅响应。

使用 Spring eventListeners,我可以从 EventListener 方法发布另一个事件,但我缺少直接订阅返回值的功能。

如何使用 Spring 实现相同的行为?如何以编程方式注册/取消注册监听器以及如何使主题动态化?

最佳答案

随着Spring的ApplicationEventMulticaster您无法订阅回复。您可能注意到 onApplicationEvent method返回void!这样做的原因是因为它实际上所做的就是同步调用订阅者(即 ApplicationListener),或者在执行器上异步运行监听器方法而不返回任何类型的 Future .

Spring 的Project Reactor不久前进化以匹配 Reactive Manifesto和类似的框架(如 RxJava)更加紧密。现在使用 Spring 5(Reactor 默认附带),您可以互换使用 Reactor 和 RxJava。

既然如此,关于您的问题:

How do I achieve the same behaviour with spring?

您使用新版本的Reactor Core以及FluxMono等函数式编程特性

With Spring eventListeners I can publish another event from an EventListener method, but I am missing the feature to directly subscribe to a return value.

如果您look at the API for Flux ,您将看到它具有流畅且功能齐全的 API(在某些方面类似于 Java 8 流)。

Flux.just(1, 2, 3, 4)
.map(value -> value + 1)
.subscribe(subscriber::function);

这样,您就可以对“事件”(即本例中的 1,2,3,4)进行操作,对这些事件的“返回值”执行操作,然后将它们通过管道传递给某些事件订阅者操作​​来消费这些事件。

How do I programmaticcaly register/unregister listeners and how do I make the topics dynamic?

你应该看看这个SO answer 。要注册/取消注册,您可以使用 Reactor 框架中所谓的“完成器”来完成此操作。请参阅take functions在 react 堆 API 中。他们将向上游发出信号,表明他们基本上希望取消订阅,并且上游生产者应该停止发射。

关于spring - 如何使用 Spring EventListener 进行 sendAndReceive ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51532653/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com