Настройте планировщик шины событий Grails для RxJava 2.x

#events #grails #rx-java2

#Мероприятия #grails #rx-java2

Вопрос:

Мы используем Grails 4.x с плагином RxJava 2.x (grails-event-rxjava2:4.0.0). Мы пытаемся изменить планировщик ввода-вывода по умолчанию на другой. В документации показано, как это сделать для реализации шины событий по умолчанию, но мы не можем изменить ее для 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, но мы не знаем, как настроить resources.groovy.

Кто-нибудь может помочь? Заранее спасибо

Ответ №1:

RxEventBus настраивается с помощью Java ServiceLoader через src/main/resources/META-INF/services/grails.events.bus.EventBus файл, используя его конструктор по умолчанию с Schedulers.io() планировщиком. Поскольку атрибут scheduler является окончательным, единственный способ, которым, как я полагаю, вы можете достичь желаемого, — это предоставить свою собственную реализацию:

  1. Создайте grails-events-rxjava2 compileOnly зависимость, в противном RxEventBus YourEventBus случае будут найдены оба и, что приведет к ошибке.

  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 файле.

Комментарии:

1. Спасибо! Он также работает для реализации по умолчанию вместо предлагаемого решения документации grails