Ktor Interceptor Заказ для той же фазы и переопределения - PullRequest
0 голосов
/ 19 марта 2020

В настоящее время я пытаюсь реализовать следующий шаблон с функциями, конвейерами и перехватчиками:

auth {
    limit(1) {
        get {
            call.respond("Cake1")
        }
    }
}

В обеих функциях я использую это:

pipeline.insertPhaseAfter(ApplicationCallPipeline.Features, myCustomPhase)
pipeline.intercept(appTokenAuthPhase)

У меня есть следующие две проблемы:

  1. При использовании PhaseAfter порядок неправильный. Auth должен быть вызван первым, а Limit - вторым. Почему лимит в первую очередь? Как я могу предотвратить это? Примечание: оно всегда должно зависеть от кодовой последовательности, первый блок должен выполняться первым. По какой-то неизвестной причине он работает как положено с PhaseBefore. Но это кажется противоречивым. Методы помещают Фазу в место для других Фаз, но не выполняют Упорядочение для слияния. Как это сделать?

insertPhaseAfter

[Phase («Настройка»), Phase («Мониторинг»), Phase («Функции») ), Фаза («предел»), фаза («вызов»), фаза («резерв»)]

[фаза («настройка»), фаза («мониторинг»), фаза («функции») , Phase ('Auth'), Phase ('Call'), Phase ('Fallback')] *

insertPhaseBefore

[Phase ( «Настройка»), Фаза («Мониторинг»), Фаза («Авторизация»), Фаза («Функции»), Фаза («Вызов»), Фаза («Откат»)] *

[Фаза (' Настройка '), Фаза («Мониторинг»), Фаза («Лимит»), Фаза («Функции»), Фаза («Вызов»), Фаза («Откат»)] *

Я хотел бы удалить фазовые перехватчики.
rate(100) {
 route("/sub") {
   rate(5) {
     get("/critical") {
       call.respondText("Hello, World!")
     }
   }
   get("/profile/{id}") { TODO("...") }
 }
}

Таким образом, для / sub / cris должен вызываться только перехватчик со скоростью (5), а скорость (100) должна быть пропущена. Возможно ли это в современной архитектуре? Я не вижу способа переопределить слияние и удалить все, кроме «последнего» перехватчика для фазы «Предел». Другой «Предел» должен оставаться на месте для всех трубопроводов без «Предела» как ребенок. Другие перехватчики (например, Auth) должны выполняться как обычно.

...