具有结构化并发和协程的“即发即弃”

时间:2018-12-04 18:14:26

标签: kotlin kotlinx.coroutines

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

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

之所以使用GlobalScope,是因为生产者仅在处理完数字后才需要确认,因此我试图开火并忘记并行的方式以能够立即响应生产者

使用结构化货币实现此目的的“最佳实践”方法是什么?我应该创建自己的范围(例如fireAndForgetScope而不是GlobalScope)吗?

1 个答案:

答案 0 :(得分:1)

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

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()