为 RxJava 配置 Grails 事件总线调度程序 2.x

Configure the Grails event bus scheduler for RxJava 2.x

我们正在使用 Grails 4.x 和 RxJava 2.x 插件 (grails-event-rxjava2:4.0.0)。我们正在尝试将默认的 Io 调度程序更改为不同的调度程序。 Documentation 显示了如何针对默认事件总线实现,但我们无法为 RxJava 2 更改它

grails-app/conf/spring/resources.groovy

import org.grails.events.bus.*
import java.util.concurrent.*

beans = {
    eventBus(ExecutorEventBus, Executors.newFixedThreadPool(5))
}

对于 RxJava2,我们应该使用 RxJavaPlugins class,但我们不知道如何配置 resources.groovy。

有人可以帮忙吗?提前致谢

RxEventBus is configured with Java's ServiceLoader via a src/main/resources/META-INF/services/grails.events.bus.EventBus 文件,使用其默认构造函数和 Schedulers.io() 调度程序。由于 scheduler 属性是最终的,我想你可以实现你想要的唯一方法是提供你自己的实现:

  1. grails-events-rxjava2成为compileOnly依赖,否则RxEventBusYourEventBus都会被找到,导致错误。

  2. 子类 org.grails.events.rxjava2.RxEventBus:

    class YourEventBus extends RxEventBus {
        YourEventBus() {
            super(Schedulers.computation()) //or whatever
        }
    }
    
  3. src/main/resources/META-INF/services/grails.events.bus.EventBus 文件中注册您的自定义实现。