«Огонь и забудь» со структурированным параллелизмом и сопрограммами - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть маленькая конечная точка, которая выглядит следующим образом

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 голосов
/ 05 декабря 2018

Как вы уже догадались, в этом случае хорошим решением будет создание собственной области видимости.
Вы можете определить ее как член вашего контроллера:

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