Pengendalian Ralat dan Sandaran
Laksanakan pengendalian ralat tersuai dan tentukan mekanisme sandaran untuk kemerosotan terkawal apabila perkhidmatan tidak tersedia.
Pengendalian Ralat dan Sandaran ialah pelajaran Gerbang API & Proksi Songsang (Nginx + Spring Cloud Gateway) percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Gerbang API & Proksi Songsang (Nginx + Spring Cloud Gateway), dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Gerbang API & Proksi Songsang (Nginx + Spring Cloud Gateway) merangkumi sejumlah 4 pelajaran.
Pengenalan kepada Pengendalian Ralat Berdaya Tahan
Dalam seni bina perkhidmatan mikro, perkhidmatan boleh gagal. Gerbang API memerlukan pengendalian ralat dan mekanisme sandaran yang kukuh untuk memastikan keseluruhan sistem kekal stabil dan mudah digunakan.
Pelajaran ini meneroka cara Spring Cloud Gateway membantu anda mengendalikan ralat dengan baik serta menyediakan respons alternatif apabila perkhidmatan bahagian belakang tidak tersedia.
Ralat Gerbang Lalai
Secara lalai, Spring Cloud Gateway menyediakan respons ralat umum apabila perkhidmatan yang dilalukan tidak dapat dicapai atau mengembalikan ralat. Respons ini selalunya merangkumi kod status HTTP standard seperti 500 Ralat Dalaman Pelayan dan 503 Perkhidmatan Tidak Tersedia, serta JSON asas.
Walaupun berfungsi, mesej lalai ini biasanya tidak mesra pengguna dan mungkin mendedahkan butiran dalaman. Penyesuaian penting untuk menghasilkan pengalaman pengguna yang baik.
Menyesuaikan Respons Ralat
Untuk meningkatkan pengalaman pengguna, kita boleh menyesuaikan respons ralat daripada Gerbang. Ini membolehkan kita:
- Menyediakan mesej ralat yang jelas dan mencerminkan identiti jenama.
- Menyembunyikan butiran ralat dalaman yang sensitif.
- Mengembalikan format ralat yang konsisten merentas semua API.
Spring Cloud Gateway, yang dibina berasaskan Spring WebFlux, membolehkan kita melaksanakan komponen ErrorWebExceptionHandler tersuai.
Contoh Pengendali Ralat Tersuai
Mari kita cipta pengendali ralat tersuai yang memintas ralat dan mengembalikan respons JSON yang dipermudah. Pengendali ini akan menggantikan halaman ralat lalai.
Jalankan kod ini dan cuba akses /fail. Anda akan melihat mesej tersuai kita!
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.boot.web.reactive.error.ErrorWebExceptionHandler;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
import java.nio.charset.StandardCharsets;
@SpringBootApplication
public class GatewayApplication {
public static void main(String[] args) {
SpringApplication.run(GatewayApplication.class, args);
}
@Bean
public RouteLocator routes(RouteLocatorBuilder builder) {
return builder.routes()
.route("nonexistent_service", r -> r.path("/fail/**")
.uri("http://localhost:9999")) // Route to a non-existent service
.build();
}
}
@Configuration
@Order(-1) // Ensure this handler runs before default ones
class CustomJsonErrorWebExceptionHandler implements ErrorWebExceptionHandler {
@Override
public Mono<Void> handle(ServerWebExchange exchange, Throwable ex) {
ServerHttpResponse response = exchange.getResponse();
response.setStatusCode(HttpStatus.INTERNAL_SERVER_ERROR);
response.getHeaders().setContentType(MediaType.APPLICATION_JSON);
String errorBody = "{\"status\":500, \"message\":\"Our service is temporarily unavailable. Please try again!\"}";
DataBuffer buffer = response.bufferFactory().wrap(errorBody.getBytes(StandardCharsets.UTF_8));
return response.writeWith(Mono.just(buffer));
}
}Memahami Mekanisme Sandaran
Mekanisme sandaran menyediakan laluan atau respons alternatif apabila perkhidmatan utama gagal atau tidak tersedia. Daripada memaparkan ralat mentah, Gerbang boleh merendahkan fungsi dengan baik melalui cara berikut:
- Mengembalikan respons lalai.
- Mengubah hala ke halaman ralat statik.
- Memanggil perkhidmatan sandaran khusus.
Mekanisme sandaran amat penting untuk ketahanan dan bagi mencegah kegagalan berantai.
Strategi Sandaran Gerbang
Spring Cloud Gateway menyokong sandaran terutamanya melalui penyepaduannya dengan pemutus litar seperti Resilience4j, yang telah kita bincangkan dalam pelajaran sebelumnya. Apabila pemutus litar dicetuskan, pemutus itu boleh memanggil sandaran dan bukannya gagal sepenuhnya.
Cara lazim untuk menentukan sandaran ini adalah dengan menggunakan kaedah setFallbackUri() dalam penapis pemutus litar, yang sering menghala ke URI forward:.
Melaksanakan Laluan Sandaran Mudah
Sandaran paling mudah ialah melalukan permintaan ke URI lain dalam Gerbang itu sendiri. URI ini boleh merujuk kepada halaman HTML statik, kaedah pengawal Spring yang ringkas atau laluan dalaman lain.
Awalan forward: dalam fallbackUri memberitahu Gerbang supaya mengendalikan permintaan secara dalaman tanpa membuat panggilan HTTP luaran yang lain.
Mengkonfigurasi Laluan Sandaran
Berikut ialah cara mengkonfigurasi laluan dengan sandaran. Jika perkhidmatan bahagian belakang laluan /api/** gagal, contohnya disebabkan pemutus litar terbuka, Gerbang akan melalukan permintaan ke titik akhir setempat /fallback kita.
Cuba akses /api/hello apabila localhost:9000 tidak tersedia.
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController // For our simple fallback endpoint
public class GatewayApplication {
public static void main(String[] args) {
SpringApplication.run(GatewayApplication.class, args);
}
@Bean
public RouteLocator routes(RouteLocatorBuilder builder) {
return builder.routes()
.route("backend_service", r -> r.path("/api/**")
.filters(f -> f.circuitBreaker(config -> config
.setName("myCircuitBreaker")
.setFallbackUri("forward:/fallback"))) // Fallback URI
.uri("http://localhost:9000")) // A service that might fail
.build();
}
// This method acts as the fallback service
@GetMapping("/fallback")
public String fallback() {
return "Service is currently unavailable. Please try again later!";
}
}Sandaran kepada Perkhidmatan Khusus
Untuk senario yang lebih kompleks, anda mungkin mengkonfigurasi fallbackUri supaya menghala ke perkhidmatan mikro khusus. "Perkhidmatan sandaran" ini boleh:
- Menyediakan halaman ralat yang lengkap.
- Menyediakan data cache atau data lalai.
- Merekod maklumat ralat terperinci.
Pendekatan ini memusatkan logik pengendalian ralat dan memastikan konfigurasi Gerbang lebih kemas.
Uji Pengetahuan Anda
Yang manakah antara berikut merupakan manfaat melaksanakan pengendalian ralat tersuai dan mekanisme sandaran dalam Gerbang API?
Ringkasan Pelajaran
Dalam pelajaran ini, kita mempelajari kepentingan pengendalian ralat dan mekanisme sandaran yang kukuh dalam Spring Cloud Gateway. Kita meneroka cara untuk:
- Menyesuaikan respons ralat lalai menggunakan
ErrorWebExceptionHandler. - Melaksanakan sandaran mudah menggunakan
setFallbackUri("forward:")bersama pemutus litar. - Memahami manfaat perkhidmatan sandaran khusus untuk senario lanjutan.
Teknik ini penting untuk membina aplikasi perkhidmatan mikro yang berdaya tahan dan mesra pengguna.
Pelajari Gerbang API & Proksi Songsang (Nginx + Spring Cloud Gateway) dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 12
- Pelajaran
- 48
Soalan Lazim
Adakah pelajaran “Pengendalian Ralat dan Sandaran” percuma?
Ya — teks penuh “Pengendalian Ralat dan Sandaran” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Gerbang API & Proksi Songsang (Nginx + Spring Cloud Gateway), tingkat taraf kepada CoddyKit PRO. Kursus Gerbang API & Proksi Songsang (Nginx + Spring Cloud Gateway) merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Pengendalian Ralat dan Sandaran”?
Laksanakan pengendalian ralat tersuai dan tentukan mekanisme sandaran untuk kemerosotan terkawal apabila perkhidmatan tidak tersedia. Anda berlatih Gerbang API & Proksi Songsang (Nginx + Spring Cloud Gateway) menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Gerbang API & Proksi Songsang (Nginx + Spring Cloud Gateway)?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Gerbang API & Proksi Songsang (Nginx + Spring Cloud Gateway) di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.
Berapa lamakah pelajaran “Pengendalian Ralat dan Sandaran” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Gerbang API & Proksi Songsang (Nginx + Spring Cloud Gateway) ini?
Ya. Setiap pelajaran Gerbang API & Proksi Songsang (Nginx + Spring Cloud Gateway) menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Pemutus Litar dengan Resilience4j
- Konfigurasi Percubaan Semula dan Had Masa
- Pengendalian Ralat dan Sandaran
- Sekatan Kegagalan & Pengehadan Kadar untuk Ketahanan