Ретрансляция событий JDA в подсистему событий Spring зависает все приложение Spring

#spring #spring-boot #kotlin #discord-jda

#весна #spring-boot #kotlin #discord-jda

Вопрос:

Я пытаюсь создать командную среду для бота Discord, используя Spring Boot с Kotlin. Я отлично справился с Javacord, но недавно я решил переключиться на JDA и столкнулся с проблемой. Структура команд, которую я создаю, также передает все события Discord в систему событий Spring, и то, что я сейчас делаю, — это получение общего прослушивателя событий (https://ci.dv8tion.net/job/JDA/javadoc/net/dv8tion/jda/core/hooks/EventListener.html ) и отправка всего в Spring, используя автоматическое подключение ApplicationEventPublisher . Однако приложение Spring, похоже, зависает на этой строке, и после отладки с некоторыми точками останова кажется, что оно застревает на этой конкретной строке (https://github.com/spring-projects/spring-framework/blob/master/spring-context/src/main/java/org/springframework/context/event/AbstractApplicationEventMulticaster.java#L190). Есть идеи, почему это происходит? Я видел это (https://github.com/spring-projects/spring-framework/issues/20904 ) но я не уверен, что делать…

SpringGenericEventPublisher.kt

 @Component
class SpringGenericEventPublisher : EventListener {
    @Autowired
    private lateinit var context: ApplicationEventPublisher

    override fun onEvent(event: Event) = context.publishEvent(event)
}
 

BotConfiguration.kt (где у меня есть компонент, который создает экземпляр JDA)

     @Bean
    fun bot(config: BotProperties): Bot = JDABuilder()  // [Bot] is a typealias for [JDA]
        //.setCallbackPool(Executors.newSingleThreadExecutor())  // I've tried this because of the issue I linked above, but I got the same result
        .setToken(config.token)
        .addEventListener(springGenericEventPublisher)
        .build()
 

Тогда у меня есть простой слушатель, просто для тестирования

 @Component
class FooComponent {
    @EventListener(Event::class)
    fun onFoo(event: Event) {
        println("Reached `onFoo`")
    }
}
 

Есть идеи?

Заранее спасибо

PS: Я должен добавить, что я также использую Spring Data Redis и Spring Data MongoDB, и что оба запускаются с успехом до этого, и что реестр команд должен запускаться после этого, просто не запускается. Экземпляр JDA отлично регистрируется, поскольку, если я просто напечатаю что-то на экране вместо публикации события SpingGenericEventPublisher , оно будет успешным.