Я создал шлюз и канал уведомления о опросе, который шлюз использует для маршрутизации сообщений. Я хочу, чтобы активатор службы опрашивал канал и делал свое дело. Но я не могу понять несколько вещей о Spring Integration.
Нужен ли в этом случае компонент IntegrationFlow? Не будет ли вызов метода шлюза просто отправлять сообщение через канал, а активатор службы может просто автоматически опрашивать, когда появляется новое сообщение?
Класс конфигурации:
@EnableIntegration
@Configuration
@IntegrationComponentScan
class IntegrationConfiguration {
@Bean
fun notificationChannel(): MessageChannel {
return MessageChannels.queue().get()
}
@Bean
fun integrationFlow(): IntegrationFlow {
TODO()
}
}
Шлюз:
@MessagingGateway(defaultRequestChannel = "notificationChannel")
@Component
interface NotificationGateway {
fun sendNotification(bytes: ByteArray)
}
Оказание услуг:
@Service
class NotificationService {
@ServiceActivator(inputChannel = "notificationChannel")
fun sendNotification(bytes: ByteArray) {
TODO()
}
}
Я новичок в Spring Integration, и мне тяжело, так как я не могу найти понятную документацию для своего уровня знаний, особенно по Spring Integration DSL.
Моя главная проблема может заключаться в том, что теперь я понимаю использование компонента IntegrationFlow Bean.
Для простого варианта использования, такого как ваш, вам действительно не нужен IntegrationFlow. Простого @ServiceActivator, который у вас есть сейчас, вполне достаточно для обработки сообщений от notificationChannel. Вам нужен только @Poller в этой @ServiceActivator конфигурации, поскольку ваш notificationChannel является PollableChannel и на него нельзя подписаться.
Дополнительные сведения см. в Справочном руководстве: https://docs.spring.io/spring-integration/docs/current/reference/html/#configuration-using-poller-annotation.
Также обратите внимание на абзац в начале документа: https://docs.spring.io/spring-integration/docs/current/reference/html/#programming-considerations