Используя Node.js, мы могли бы использовать домены для захвата ошибок, генерируемых в асинхронном коде, например: https://medium.com/@the1mills/using-node-js-domains-in-production-797105a4c302
, используя домены таким образом, мы можем прикрепить ошибку к конкретному запросу, чтобы мы могли отправить ответи очищать, и позволяет нашему серверу продолжать пыхтеть.
И с помощью Golang есть промежуточное программное обеспечение для обработки ошибок, подобное этому, которое мы можем использовать для захвата ошибки и ее закрепления в конкретном запросе.
func Error() Adapter {
return func(next http.HandlerFunc) http.HandlerFunc {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
defer func() {
if err := recover(); err != nil {
log.Error("Caught error in defer/recover middleware: ", err)
// ...
json.NewEncoder(w).Encode(struct {
Message string
}{
message,
})
}
}()
log.Info("We are handling errors with defer.")
//next.ServeHTTP(w, r)
next(w,r);
})
}
}
, как вы, возможно, уже знаете, это промежуточное ПО Error просто регистрируется до того, как будут вызваны любые другие маршруты API, и в случае возникновения паники defer его поймает.Я не уверен, работает ли он с «подпрограммами», но он работает с текущей запущенной подпрограммой.
Так что мой вопрос - при использовании Vertx - как мы предотвращаем сбой нашего процесса, если один запроспричины и ошибки?В идеале мы можем просто зарегистрировать ошибку и отправить ответ на этот запрос и продолжить пыхтение.