Функция Micronaut: постепенное отключение после выполнения задания - PullRequest
0 голосов
/ 03 апреля 2020

Я нахожусь в процессе извлечения основной функциональности из более старого приложения и «оборачиваю» его в лямбду, чтобы обеспечить его в облачной среде AWS. Я создал функцию Micronaut для этой цели. На первый взгляд, функция Micronaut работает нормально.

Однако я заметил, что выполнение не остановится после выполнения задачи. Дальнейшая проверка показала, что унаследованный код создал несколько пользовательских потоков, и закрытие этих потоков находится вне моего контроля. Чтобы исправить это, я выполняю System.exit(0) вручную с задержкой в ​​одну секунду (чтобы убедиться, что выходной сигнал возвращается перед выходом):

@FunctionBean("the-function")
public class SomeFunction extends FunctionInitializer implements Function<SomeInput, SomeOutput> {

    @Override
    public SomeOutput apply(SomeInput intput) {
        SomeOutput result = ...
        shutdownDelayed();
        return result;
    }

    private void shutdownDelayed() {
        Executors
                .newScheduledThreadPool(1)
                .scheduleWithFixedDelay(() -> System.exit(0), 1, 1, TimeUnit.SECONDS);
    }

    public static void main(String... args) {
        // ...
    }
}

Есть ли лучший способ обеспечить отключение функции Micronaut сам по себе, даже если пользовательские потоки все еще существуют? Или в AWS есть настройка, которую я могу использовать для его отключения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...