В настоящее время я пытаюсь реализовать следующий шаблон с функциями, конвейерами и перехватчиками:
auth {
limit(1) {
get {
call.respond("Cake1")
}
}
}
В обеих функциях я использую это:
pipeline.insertPhaseAfter(ApplicationCallPipeline.Features, myCustomPhase)
pipeline.intercept(appTokenAuthPhase)
У меня есть следующие две проблемы:
- При использовании 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) должны выполняться как обычно.