Я прочитал , что Spring Boot поддерживает Kotlin Coroutines начиная с версии 2.2.0. Но когда я пытаюсь это сделать с spring amqp (версия 2.2.0) следующим образом:
@RabbitListener(...)
@Component
class EventConsumer {
@RabbitHandler
suspend fun consumeEvent(e: MyEvent) {
...
}
}
, а затем публикую событие:
rabbitTemplate.convertAndSend("my-exchange", "my-routing-key", MyEvent("data"))
, я получаюследующая ошибка:
org.springframework.amqp.rabbit.support.ListenerExecutionFailedException: Listener method could not be invoked with the incoming message
Endpoint handler details:
Method [public java.lang.Object com.x.y.EventConsumer(com.x.y.MyEvent,kotlin.coroutines.Continuation<? super kotlin.Unit>)]
Bean [com.x.y.EventConsumer@1fce0403]
at org.springframework.amqp.rabbit.listener.adapter.MessagingMessageListenerAdapter.invokeHandler(MessagingMessageListenerAdapter.java:214) ~[spring-rabbit-2.2.0.RELEASE.jar:2.2.0.RELEASE]
at org.springframework.amqp.rabbit.listener.adapter.MessagingMessageListenerAdapter.invokeHandlerAndProcessResult(MessagingMessageListenerAdapter.java:143) ~[spring-rabbit-2.2.0.RELEASE.jar:2.2.0.RELEASE]
at org.springframework.amqp.rabbit.listener.adapter.MessagingMessageListenerAdapter.onMessage(MessagingMessageListenerAdapter.java:132) ~[spring-rabbit-2.2.0.RELEASE.jar:2.2.0.RELEASE]
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:1569) ~[spring-rabbit-2.2.0.RELEASE.jar:2.2.0.RELEASE]
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.actualInvokeListener(AbstractMessageListenerContainer.java:1488) ~[spring-rabbit-2.2.0.RELEASE.jar:2.2.0.RELEASE]
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:1476) ~[spring-rabbit-2.2.0.RELEASE.jar:2.2.0.RELEASE]
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:1467) ~[spring-rabbit-2.2.0.RELEASE.jar:2.2.0.RELEASE]
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.executeListener(AbstractMessageListenerContainer.java:1411) ~[spring-rabbit-2.2.0.RELEASE.jar:2.2.0.RELEASE]
at org.springframework.amqp.rabbit.listener.DirectMessageListenerContainer$SimpleConsumer.callExecuteListener(DirectMessageListenerContainer.java:1035) ~[spring-rabbit-2.2.0.RELEASE.jar:2.2.0.RELEASE]
at org.springframework.amqp.rabbit.listener.DirectMessageListenerContainer$SimpleConsumer.handleDelivery(DirectMessageListenerContainer.java:995) ~[spring-rabbit-2.2.0.RELEASE.jar:2.2.0.RELEASE]
Если я удалю ключевое слово suspend
, то все будет работать как положено.
Нужна ли какая-то специальная конфигурация для Spring AMQP для работы с Kotlin Coroutines или пока нет поддержки для этого?