对于最新的稳定版本,请使用 Spring Integration 6.3.4! |
对于最新的稳定版本,请使用 Spring Integration 6.3.4! |
该框架也得到了改进,以支持函数的 Kotlin lambda,因此现在您可以结合使用 Kotlin 语言和 Spring 集成流定义:
@Bean
@Transformer(inputChannel = "functionServiceChannel")
fun kotlinFunction(): (String) -> String {
return { it.toUpperCase() }
}
@Bean
@ServiceActivator(inputChannel = "messageConsumerServiceChannel")
fun kotlinConsumer(): (Message<Any>) -> Unit {
return { print(it) }
}
@Bean
@InboundChannelAdapter(value = "counterChannel",
poller = Poller(fixedRate = "10", maxMessagesPerPoll = "1"))
fun kotlinSupplier(): () -> String {
return { "baz" }
}
Kotlin 协程
从版本 6.0 开始, Spring 集成提供了对 Kotlin 协程的支持。
现在函数和&返回类型可以用于服务方法:suspend
kotlinx.coroutines.Deferred
kotlinx.coroutines.flow.Flow
@ServiceActivator(inputChannel = "suspendServiceChannel", outputChannel = "resultChannel")
suspend fun suspendServiceFunction(payload: String) = payload.uppercase()
@ServiceActivator(inputChannel = "flowServiceChannel", outputChannel = "resultChannel", async = "true")
fun flowServiceFunction(payload: String) =
flow {
for (i in 1..3) {
emit("$payload #$i")
}
}
该框架将它们视为 Reactive Streams 交互,并用于转换为相应的 Reactor 类型。
这样的函数 reply 将在 reply 通道中处理,如果它是 ,或者作为相应回调的结果。ReactiveAdapterRegistry
Mono
Flux
ReactiveStreamsSubscribableChannel
CompletableFuture
默认情况下,具有 result 的函数不在 上,因此实例将作为回复消息有效负载生成。
目标应用程序负责将此对象作为协程处理或分别将其转换为 。Flow async @ServiceActivator Flow Flux |
在 Kotlin 中声明接口方法时,也可以使用修饰符进行标记。
框架利用 internally 使用下游流执行请求-回复。
这样的结果由 API 在内部处理,以实现网关的调用函数的参数:@MessagingGateway
suspend
Mono
Mono
MonoKt.awaitSingleOrNull()
kotlin.coroutines.Continuation
suspend
@MessagingGateway(defaultRequestChannel = "suspendRequestChannel")
interface SuspendFunGateway {
suspend fun suspendGateway(payload: String): String
}
根据 Kotlin 语言要求,必须将此方法作为协程调用:
@Autowired
private lateinit var suspendFunGateway: SuspendFunGateway
fun someServiceMethod() {
runBlocking {
val reply = suspendFunGateway.suspendGateway("test suspend gateway")
}
}
默认情况下,具有 result 的函数不在 上,因此实例将作为回复消息有效负载生成。
目标应用程序负责将此对象作为协程处理或分别将其转换为 。Flow async @ServiceActivator Flow Flux |