Spring Integration将网关连接到服务激活器

时间:2019-03-06 13:48:58

标签: spring spring-boot kotlin spring-integration spring-integration-dsl

我已经创建了一个网关和一个轮询NotificationChannel,该网关用于路由消息。我希望服务激活器从通道轮询并执行其操作。但是我似乎无法掌握有关Spring Integration的一些知识。

在这种情况下,我们需要一个IntegrationFlow Bean吗?不会只通过通道发送消息而调用网关方法,并且服务激活器可以在出现新消息时自动轮询吗?

ConfigurationClass:

@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的用法

1 个答案:

答案 0 :(得分:2)

对于像您这样的简单用例,您实际上不需要IntegrationFlow。您现在拥有的简单@ServiceActivator足以处理来自notificationChannel的消息。由于您的@Poller@ServiceActivator,因此您不需要的是notificationChannel的{​​{1}}配置。

有关更多信息,请参见参考手册: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