Передача событий JDA в подсистему Spring Event приводит к зависанию всего приложения Spring - PullRequest
0 голосов
/ 15 апреля 2019

Я пытаюсь создать командную среду для Discord Bot, используя Spring Boot с Kotlin. Я отлично работал с Javacord, но недавно я решил переключиться на JDA и столкнулся с проблемой. Командная среда, которую я создаю, также передает все события Discord в систему Spring Event, и в настоящее время я собираю общий прослушиватель событий (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, оно будет успешно выполнено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...