Zuul adalah penyeimbang beban berdasarkan perutean JVM dan sisi server yang diproduksi oleh Netflix.
Fungsi Zuul:
Mesin Aturan Zuul memungkinkan aturan penulisan dan filter melalui bahasa JVM apa pun, dan mendukung konstruksi berbasis Java dan Groovy.
Properti konfigurasi Zuul.max.host.connections telah digantikan oleh dua properti konfigurasi baru, Zuul.host.maxtotalConnections (jumlah total koneksi) dan Zuul.Host.MaxperRoutEconnections, (jumlah koneksi per rute) memiliki nilai default masing -masing 200 dan 20, masing -masing.
1. Mengapa menggunakan ini
Dalam sistem Microservice yang dibangun di SpringCloud, Gateway Zuul biasanya digunakan untuk melakukan beberapa operasi penyaringan seperti verifikasi pengguna. Misalnya, pengguna menyimpan token di header atau parameter URL. Lapisan gateway perlu menggunakan token ini untuk menemukan userid pengguna dan menyimpannya dalam permintaan sehingga layanan microser berikutnya dapat digunakan secara langsung untuk menghindari kueri dengan token.
2. Pengetahuan Dasar
Penggunaan terbesar di Zuul adalah selain perutean, yang filter. Filter khusus perlu mengimplementasikan antarmuka zuulfilter. Dalam metode run (), Anda dapat menggunakannya
RequestContext ctx = requestContext.getCurrentContext (); HttpservletRequest request = ctx.getRequest ();
Dapatkan permintaan, tetapi hanya ada getParameter () dalam permintaan tetapi tidak ada metode setParameter (), sehingga tidak layak untuk secara langsung memodifikasi parameter URL. Selain itu, meskipun setattribute () dapat digunakan dalam reqeust, mungkin karena berbagai lingkup, set atribut di sini tidak dapat diperoleh dalam layanan mikro berikutnya, sehingga metode lain harus dipertimbangkan.
3. Praktik Khusus
Metode terakhir adalah menggunakan
ctx.setRequest (baru httpservletrequestwrapper (request) {})Cara merekonstruksi permintaan dalam konteks, kodenya adalah sebagai berikut:
impor javax.servlet.http.httpservletrequestwrapper; // Tambahkan UserId coba {inputStream in = ctx.getRequest (). GetInputStream (); String body = streamutils.copytostring (in, charset.forname ("UTF-8")); System.out.println ("Body:" + Body); JsonObject json = jsonobject.fromObject (body); json.put ("userid", userid); String newbody = json.toString (); System.out.println ("Newbody:" + Newbody); byte akhir [] reqBodyBytes = newBody.getBytes (); ctx.setRequest (baru httpservletRequestWrapper (request) {@Override servletInputStream getInputStream () melempar ioException {return new new publetInputStreamWrapper (reqBodyTes);} @Override int getContentLight () {returnbodytes);} @Override int getContentLight () {rEQBOBYTES); getContentLengthLong () {return reqBodyBytes.length; } catch (ioException e) {e.printstacktrace (); }Idenya adalah untuk mendapatkan aliran input yang diminta dan menulis ulang, yaitu menulis ulang parameter JSON.
Pada pengontrol layanan mikro berikutnya, bentuk dapat digunakan
@RequestBody Map <String, Object> body ====== Body.get ("userId");Dengan cara ini, dapatkan UserId yang disahkan di Zuulfilter
Empat. Beberapa upaya
Saat menulis ulang httpservletRequestWrapper, saya mencoba menulis ulang metode getParameterNames() dan getParameterMap() , berharap untuk menulis ulang parameter URL, tetapi itu tidak berlaku.
Meringkaskan
Di atas adalah metode memodifikasi informasi parameter permintaan di SpringCloud yang diperkenalkan kepada Anda oleh editor. Saya harap ini akan membantu Anda. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan dan editor akan membalas Anda tepat waktu. Terima kasih banyak atas dukungan Anda ke situs web Wulin.com!