Pada artikel sebelumnya, kita dapat menemukan bahwa ketika kita memanggil API layanan lain melalui RestTemplate, parameter yang diperlukan harus disambung dalam URL yang diminta. Jika ada lebih sedikit parameter, kami mungkin dapat mentolerirnya. Setelah ada beberapa parameter, menyambungkan string permintaan tidak akan efisien dan tampak bodoh.
Jadi apakah ada solusi yang lebih baik? Jawabannya pasti, dan Netflix telah memberi kami kerangka kerja: berpura -pura.
Petana adalah klien layanan web deklaratif, dan tujuannya adalah untuk membuat panggilan layanan web lebih sederhana. Petana menyediakan templat untuk permintaan HTTP. Dengan menulis antarmuka sederhana dan anotasi penyisipan, Anda dapat menentukan parameter, format, alamat, dan informasi lain dari permintaan HTTP.
Petana akan sepenuhnya proxy permintaan HTTP, dan kami hanya perlu menyebutnya seperti memanggil metode untuk menyelesaikan permintaan layanan dan pemrosesan terkait. Petera mengintegrasikan pita dan hystrix (kita akan berbicara tentang Hytrix nanti), jadi kita tidak bisa lagi menggunakan dua komponen ini secara eksplisit.
Singkatnya, Petchign memiliki karakteristik berikut:
Ini terlihat seperti pemetaan permintaan permintaan dari lapisan pengontrol dari pola springmvc kami. Pola ini adalah sesuatu yang sangat kami sukai. Petchign menggunakan @FeignClient untuk memetakan layanan.
Pertama, langkah pertama adalah membuat modul kepaing baru secara asli, kemudian memperkenalkan dependensi terkait dan ketergantungan berpura -pura, yang secara otomatis akan memperkenalkan dependensi Hystrix, sebagai berikut:
<dependency> <GroupId> org.springframework.cloud </groupid> <ArTifactId> Spring-cloud-starter-eureka </arttifactid> <version> 1.3.5.release </version> </dependency> <RoupidD> org.springframework.cloud </groupid> <RroupTID> org.springframework.cloud </groupid> <version> 1.4.0.release </version> </dependency>
Konfigurasi application.yml adalah sebagai berikut:
Server: Port: 8083Spring: Aplikasi: Nama: Fishign-Consumereureka: Klien: Layanan-URL: Defaultzone: http: // localhost: 8888/eureka/, http: // localhost: 8889/eureka/
Kemudian, dalam artikel sebelumnya, beberapa metode baru ditambahkan ke dua layanan Modul Provider1 dan Provider2, seperti yang ditunjukkan dalam kode berikut:
/*** Dibuat oleh Cong pada 2018/5/8. */ @RESTControllerPublic Class HelloController {@RequestMapping ("/Hello") Public String Hello () {System.out.println ("Access Comes 1 ..."); mengembalikan "hello1"; } @RequestMapping ("/hjcs") Daftar publik <string> laowangs (ID String) {Daftar <String> Daftar = ArrayList baru <> (); list.add ("laowang1"); list.add ("laowang2"); list.add ("laowang3"); daftar pengembalian; } // menambahkan metode @RequestMapping (value = "/hellol", Method = requestMethod.get) Public String Hello (@RequestParam Name String) {return "Hello" + Name; } @RequestMapping (value = "/hello2", Method = requestMethod.get) Pengguna publik halo (@Requestheader nama string, @Requestheader Integer Age) {return baru pengguna (nama, usia); } @RequestMapping (value = "/hello3", Method = requestMethod.post) Public String Hello (@RequestBody User Pengguna) {return "Hello"+ User. getName () + "," + pengguna. getage (); }}Berikutnya adalah kelas pengguna yang diperlukan untuk kode di atas, kode ini adalah sebagai berikut:
/*** Dibuat oleh Cong 2017/12/2. */pengguna kelas publik {nama string privat; usia bilangan bulat pribadi; // Harus ada konstruktor kosong saat membuat serial transmisi, jika tidak, kesalahan akan terjadi. pengguna publik () {} pengguna publik (nama string, usia integer) {this.name = name; this.age = usia; } public string getName () {return name; } public void setName (name string) {this.name = name; } getage integer publik () {usia kembali; } public void setage (usia integer) {this.age = usia; }}Selanjutnya, gunakan Pisau @FeignClient ("nama layanan") untuk memetakan panggilan layanan. Kodenya adalah sebagai berikut:
Paket hjc; impor org.springframework.cloud.netflix.feign.feignclient; impor org.springframework.web.bind.annotation.*;/*** dibuat oleh CONG pada 2018/5/17. */// Configuration = xxx.class Kelas ini mengkonfigurasi beberapa properti yang tepat dari hystrix // value = "Nama layanan yang Anda gunakan" @FeignClient (value = "Hello-Service", Fallback = Fignfallback.class) Antarmuka publik Petaran (/Hello (// Mething Metode di Layanan @requestmapping ("/Hello ("/Hello ") () Hello () Hello;) @RequestMapping (value = "/hellol", method = requestMethod.get) string hello (@RequestParam ("name") string name); @RequestMapping (value = "/hello2", Method = requestMethod.get) pengguna halo (@Requestheader ("name") nama string, @requestheader ("usia") usia integer); @RequestMapping (value = "/hello3", method = requestMethod.post) string hello (@RequestBody pengguna pengguna);}Kemudian suntikkan antarmuka Feiservice ke lapisan pengontrol untuk melakukan panggilan layanan jarak jauh. Kodenya adalah sebagai berikut:
/*** Dibuat oleh Cong pada 2018/5/17. */ @Restcontrollerpublic classcontroller {@Autowired pisananservice pisiservice; @RequestMapping ("/Consumer") Public String HelloConsumer () {return pisitagnservice.hello (); } @RequestMapping ("/Consumer2") Public String HelloConsumer2 () {String r1 = fignservice.hello ("hjc"); String r2 = fignservice.hello ("hjc", 23) .toString (); String r3 = fignservice.hello (pengguna baru ("hjc", 23)); return r1 + "-----" + r2 + "----" + r3; }}Kemudian, di mana untuk memberi anotasi klien eureka di kelas startup modul fign @EnableDiscoveryclient Fign Client Annotation
@EnableFeignClients, kodenya adalah sebagai berikut:@springbootApplication@enableDiscoveryclient@enablefeignClientSspublic class fegnApplication {public static void main (string [] args) {springApplication.run (fignApplication.class, args); }}Kemudian mulailah kelas startup, masukkan localhost: 8083/konsumen di browser, dan hasil berjalan adalah sebagai berikut:
Anda dapat melihat bahwa pemungutan suara penyeimbangan beban muncul Hello1 dan Hello2.
Kemudian terus masuk localhost: 8083/konsumen2 di browser, dan hasil berjalan adalah sebagai berikut:
Selanjutnya, kami menggunakan penurunan layanan di bawah layanan panggilan Deklaratif Petana. Maka kita harus membuat kelas Fignfallback baru untuk mewarisi feiservice. Kodenya adalah sebagai berikut:
Paket hjc; impor org.springframework.stereotype./*** dibuat oleh Cong pada 2018/5/17. */ @ComponentPublic Class Fegnfallback mengimplementasikan Pisana Petana {// Metode implementasi adalah metode penurunan peringkat layanan @Override public string hello () {return "error"; } @Override public string halo (nama string) {return "error"; } @Override pengguna publik halo (nama string, usia integer) {return new user (); } @Override Public String Hello (pengguna pengguna) {return "error"; }}Kemudian kami menghentikan dua modul Modul Penyedia Layanan dan Modul Provider2, dan hasil berjalan adalah sebagai berikut:
Anda dapat melihat bahwa panggilan kami memiliki semua layanan yang diturunkan.
Kemudian jika kami ingin mengontrol parameter hystrix secara akurat, misalnya, parameter yang dikombinasikan dengan Hystrix, Anda dapat mengkonfigurasi Atribut Kelas Konfigurasi = XXX di kelas Fishlient dalam fignclient annotation untuk menentukan properti secara akurat di kelas mana.
Atau konfigurasinya di application.yml, sebagai berikut:
Hystrix: Perintah: Default: Eksekusi: Isolasi: Thread: TimeoutInmilliseconds: 5000Ribbon: ConnectTimeout: 500 #Jika Anda ingin mengonfigurasi layanan terpisah secara rinci, seperti berikut Hello-Service: Ribbon: ConnectTimeOut: 500
Ini memenuhi panggilan sebagian besar skenario kami, tetapi jika Anda menulis skenario yang bagus, Anda masih perlu menggunakan Native Hystrix dan mengikuti penggunaan Hystrix kami sebelumnya. Hanya saja, jangan gunakan panggilan klien patahan, sebagai berikut:
/*** Dibuat oleh Cong pada 2018/5/17. */kelas publik hjccommand memperluas hystrixCommand {hjccommand yang dilindungi (grup hystrixcommandgroupKey) {super (grup); } @Override Protected Object Run () melempar Exception {return null; }}Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.