"Fire and forget" 具有结构化并发和协程

"Fire and forget" with structured concurrency and coroutines

我有一个看起来像这样的小端点

val numbers = it.bodyAsString.parseJsonList<Numbers>()
processedNumbers = numberService.process(numbers)
GlobalScope.launch {
    sqsService.sendToSqs(processedNumbers)
}
it.response.setStatusCode(204).end()

我使用 GlobalScope 的原因是因为生产者只需要在处理完数字后进行确认,所以我试图在并行轨道上进行一次火灾和忘记,以便能够立即响应生产者

使用结构化货币进行此操作的“最佳实践”方式是什么?我应该创建自己的作用域(比如 fireAndForgetScope 而不是 GlobalScope)吗?

正如您已经猜到的那样,在这种情况下创建您自己的作用域是一个很好的解决方案。
您可以将其定义为控制器的成员:

private val bgScope = CoroutineScope(newFixedThreadPoolContext(4, "background-tasks"))

那么用法和你做的很相似:

val numbers = it.bodyAsString.parseJsonList<Numbers>()
processedNumbers = numberService.process(numbers)
bgScope.launch {
    sqsService.sendToSqs(processedNumbers)
}
it.response.setStatusCode(204).end()