Konfigurasi Mekanisme Retry Springcloud
Pertama -tama, coba lagi di sini bukan coba lagi setelah kesalahan dilaporkan, tetapi coba lagi ke contoh lain setelah klien penyeimbang beban menemukan bahwa instance permintaan jarak jauh tidak tersedia.
@Bean@loadbalAndRestTemplate restTemplate () {httpComponentSclientHttpRequestFactory httpRequestFactory = httpComponentSclientHttpRequestFactory () baru (); httpRequestFactory.setreadtimeout (5000); httpRequestFactory.setConnectTimeout (5000); return new resttemplate (httpRequestFactory);}Mekanisme Retry Petera
Petugas mencoba lagi konfigurasi melalui retryer yang dikemas dengan sendirinya, dan standarnya 5 kali
Paket Petugas; Impor statis java.util.concurrent.timeunit.seconds;/*** dikloning untuk setiap doa untuk {@link klien#execute (request, fegn.request.options)}. * Implementasi dapat menjaga negara untuk menentukan apakah operasi coba lagi harus berlanjut atau tidak. * /Retryer Antarmuka Publik Memperluas { /*** jika dikembalikan dikembalikan, dikembalikan (mungkin setelah tidur). Sebaliknya menyebarkan pengecualian. */ void lanjutanPropagate (RetryableException E); Retryer clone (); kelas statis public static mengimplementasikan retryer {private final int maxattempts; Periode panjang final pribadi; Final Private Long Maxiod; upaya int; Long SleeptFormillis; Default publik () {this (100, detiks.tomillis (1), 5); } default publik (periode panjang, long maxperiod, int maxattempts) {this.period = periode; this.maxperiod = maxperiod; this.maxAttempts = maxAttempts; this.attempt = 1; }Puasa Batal Retry
@BeanRetryer fignretryer () {return retryer.never_retry;}pengaturan batas waktu permintaan pasokan
@BeanRequest.Options requestOptions (configAbleNvironment env) {int ribbonReadtimeout = env.getProperty ("Ribbon.readtimeout", int.class, 6000); int ribbonConnectionTimeout = env.getProperty ("ribbon.connecttimeout", int.class, 3000); kembalikan permintaan baru.Coba lagi setiap komponen di awan pegas
Baru -baru ini, banyak sepatu anak -anak telah bertanya kepada saya bagaimana mengkonfigurasi komponen Spring Cloud XXX untuk dicoba lagi. Artikel ini merangkumnya.
Mekanisme coba lagi di Spring Cloud cukup kacau. Versi yang berbeda memiliki perbedaan tertentu dan implementasinya tidak terlalu berbeda. Untungnya, Spring Cloud Camden pada dasarnya stabil setelahnya, dan beberapa perbaikan telah dilakukan di Dalston. Detailnya belum ditentukan.
Mari kita bahas secara rinci di bawah ini.
Versi yang saya gunakan adalah Spring Cloud Dalston SR4, yang juga cocok untuk Edgware dan nanti. Untuk versi Dalston sebelumnya, artikel ini tidak akan membahasnya, Anda dapat mempelajarinya sendiri.
Coba lagi pita+resttemplate
Untuk resttemplate yang mengintegrasikan pita, misalnya, resttemplate menambahkan anotasi @Loadalanced:
@Bean@loadbalacedpublic restTemplate restTemplate () {SimpleClientHttPRequestFactory SimpleClientHttPRequestFactory = new SimpleClientHtPRequestFactory (); SimpleClientHttPRequestFactory.SetConnectTimeout (1000); SimpleClientHttpRequestFactory.setreadtimeout (1000); Return New RestTemplate (SimpleClientHttPRequestFactory);}Atas dasar ini, coba lagi dapat dicapai dengan menggunakan konfigurasi berikut:
Spring: Cloud: LoadBalancer: RETRY: Diaktifkan: Trueribbon: # jumlah maksimum retries untuk contoh yang sama, tidak termasuk panggilan pertama ke maxautoretries: 1 # jumlah maksimum retries untuk contoh lain, tidak termasuk server yang dipilih maxautoretriesNextServer: 2 # Apakah semua operasional adalah retries OKOKSOREDY FALUSOLEDOLE:
Retry Retry
Berpura -pura sendiri juga memiliki kemampuan untuk mencoba lagi. Di awan musim semi awal, petign menggunakan feign.Retryer.Default#Default() , dan mencobanya 5 kali. Tetapi Petugas mengintegrasikan pita, dan pita juga memiliki kemampuan untuk mencoba lagi, yang dapat menyebabkan kebingungan dalam perilaku saat ini.
Spring Cloud menyadari masalah ini, jadi itu membuat perbaikan untuk mengubah Retry Retry menjadi feign.Retryer#NEVER_RETRY . Jika Anda perlu menggunakan Retry Retry, cukup gunakan konfigurasi Retry Ribbon. Oleh karena itu, untuk versi Camden dan yang lebih baru, Retry Retry dapat dikonfigurasi menggunakan properti berikut:
Pita: MaxAutoretries: 1 MaxAutoretriesNextServer: 2 OktoretryOnall Operasi: Salah
Masalah terkait dapat ditemukan di: https://github.com/spring-cloud/spring-cloud-netflix/issues/467
Coba lagi Zuul
Konfigurasi:
Zuul: # Aktifkan Zuul yang Dapat Ditukang Yang Dapat Ditukang Ulang: Trueribbon: MaxAutoretries: 1 MaxAutoretriesNextServer: 2 OktoretrySonall Operasi: Salah
Di atas kami menggunakan zuul.retryable=true untuk memungkinkan coba lagi secara global untuk Zuul. Bahkan, kami juga dapat mengaktifkan/mematikan rute yang ditentukan:
Zuul.Routes. <RouteName> .Retryable = true
Prioritas konfigurasi lokal lebih tinggi.
Coba lagi berdasarkan kode respons HTTP
ClientName: Pita: Retryablestatuscodes: 404.502
Catatan:
Waktu habis Hystrix harus lebih besar dari waktu batas waktu, jika tidak, setelah Hystrix timeout, tidak ada cara untuk terus mencoba lagi.
Secara umum, tidak disarankan untuk mengatur ribbon.OkToRetryOnAllOperations menjadi true. Karena setelah konfigurasi ini diaktifkan, operasi apa pun dicoba lagi, termasuk permintaan pasca, dan karena badan permintaan di -cache, sumber daya server mungkin terpengaruh saat ini.
Meringkaskan
Di atas adalah seluruh konten artikel ini. Saya berharap konten artikel ini memiliki nilai referensi tertentu untuk studi atau pekerjaan semua orang. Jika Anda memiliki pertanyaan, Anda dapat meninggalkan pesan untuk berkomunikasi. Terima kasih atas dukungan Anda ke wulin.com.