Pendahuluan: Arsitektur Microservice pasti memiliki banyak contoh layanan mikro tunggal. Jadi bagaimana klien dapat mengalokasikan permintaan ke contoh beberapa layanan microser? Di sini kita perlu menggunakan penyeimbangan beban
1. Pengantar Pita
Pita adalah penyeimbang beban yang dilepaskan oleh Netflix, yang membantu mengendalikan perilaku klien HTTP dan TCP. Setelah mengkonfigurasi daftar alamat penyedia layanan untuk pita, pita dapat secara otomatis membantu konsumen layanan untuk meminta berdasarkan beberapa algoritma penyeimbangan beban. Pita memberi kami banyak algoritma penyeimbang beban secara default, seperti pemungutan suara, keacakan, dll., Yang juga dapat disesuaikan;
Ribbon's Github: https://github.com/netflix/ribbon
Saat menggunakan Ribbon dan Eureka di Springcloud, Ribbon akan secara otomatis mendapatkan daftar alamat penyedia layanan dari Eurekaserver dan berdasarkan algoritma penyeimbangan beban.
2. Pita pertempuran aktual
1. Buat eurekaserver, eureKaclient1, eureKaclient2. Saya telah menyebutkan penggunaan eureka sebelumnya, jadi inilah kodenya:
Eurekaserver:
Serverapplication.java
@SpringbootApplication@enableeureKaserverpublic kelas serverApplication {public static void main (string [] args) {springApplication.run (serverapplication.class, args); }}pom.xml
<? Xml Version = "1.0" encoding = "UTF-8"?> <Project xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.w3.org/2001/xmlschema xsi: schemalocation = "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <ModelVersion> 4.0.0 </modelversion> <groupid> com.cn </groupid> 4.0.0 <ArTifactId> eureka-ribbon-server </stifactid> <version> 1.0-snapshot </version> <properties> <poject.build.sourceencoding> UTF-8 </prova.build.sourceencoding <Java.version> 1.8 </java.version> </Parenties> <Java.version> 1.8 </java.version> </versies> </versies> <groupid> org.springframework.boot </sroupid> <ArtifactId> Spring-boot-starter-parent </arttifactid> <version> 1.5.13.release </version> </parent> <sependency> <Ruppendency> <troupid> org.springframork. <groupId> org.springframework.cloud </groupid> <ArtifactId> Spring-cloud-starter-eureka-server </artifactid> </gandendency> </dependency> </dependency> </dependency> <gandelencyManagement> <dependency> <dependency> <groupid> org.springfring. <ArtifactId> Spring-cloud-Dependencies </artifactid> <version> edgware.sr3 </version> <ypeM> pom </ype- scope> impor </opope> </dependency> </dependency> </dependencyManagement> <! <ArTifactId> spring-boot-maven-plugin </artifactid> </lugin> </lugin> </build> </poject>
application.properties
Server.port = 8761#Catatan: Kedua konfigurasi ini benar secara default. Anda harus berubah menjadi false, jika tidak, kesalahan akan dilaporkan. Connot connect server# indicates whether to register itself on EurekaServer eureka.client.register-with-eureka=false# indicates whether to obtain registration information from EurekaServer eureka.client.fetch-registry=falseeureka.client.service-url.defaultZone=http://localhost:8761/eureka/
EureKaclient1:
pom.xml
<? Xml Version = "1.0" encoding = "UTF-8"?> <Project xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.w3.org/2001/xmlschema xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.cn</groupId> <artifactId>eureka-ribbon-client</artifactId> <version> 1.0-snapshot </version> <properties> <poject.build.sourceencoding> utf-8 </project.build.sourceencoding> <java.version> 1.8 </java.version> </Pro Properties> <darent> <groupid> org.springfring.board.boot <ArTifactId> Spring-Boot-Starter-Parent </arttifactid> <version> 1.5.13.release </version> </tarent> <dependencies> <dependency> <Groupid> org.springframework.cloud </roupid> <ArTifactid> </Artifactid> <tar-cloud-starterer </arttifactid> </Artifactid> </Artifactid> <T/ArtiFacTid> <T/ArtiFacTID> </Artifactid> <T/ArtiFacTID> </Artifactid> <groupid> org.springframework.cloud </proupid> <ArtiFacTId> Spring-cloud-starter-eureka </arttifactid> </dependency> </dependency> </dependency> </dependency> <dependencyManagement> <dep dependency> <groupid> <groupid> org.springfring.cloud> <groupid> <groupid> <groupid> <ArtifactId> Spring-cloud-Dependencies </artifactid> <version> edgware.sr3 </version> <ypeM> pom </ype- scope> impor </opope> </dependency> </dependency> </dependencyManagement> <! <ArTifactId> spring-boot-maven-plugin </artifactid> </lugin> </lugin> </build> </poject>
server.port = 8762spring.application.name = client-8762eureka.client.service-url.defaultzone = http: // localhost: 8761/eureka/
Tambahkan RestTemplate Remote Call Instance ke wadah di kelas startup dan tambahkan anotasi loadbalanced untuk membuat resttemplate memiliki kemampuan memuat penyeimbangan:
@SpringbootApplication@enableDiscoVeryClientPublic ClientApplication {public static void main (string [] args) {springApplication.run (clientApplication.class, args); }/** * @description: Menambahkan anotasi @LoadBalAnd untuk menambahkan kemampuan penyeimbang beban ke restTemplate * @param: * @return: * @author: * @date: 2018/6/15 */@bean @boadbalaiced resttemplate getRestemplate () {return resttemp @bean @boadbalaanced (); }}Buat Controller, Suntikkan Resttemplate dan LoadBalancerClient Instances:
Paket com.cn.controller; impor org.springframework.beans.factory.annotation.Autowired; impor org.springframework.cloud.client.serviceInstance; impor org.springframework.cloud.client.loadBalancer.Loadalankerercer; org.springframework.web.bind.annotation.getmapping; impor org.springframework.web.bind.annotation.responseBody; org.springframework.web.client.resttemplate: ** ** @program: springcloud-example * @description: ** @krogram: * @despripe: * @krogram: springcloud-example * @despripe: ** @des: * ** @despram; **/ @ControllerPublic Class RibbonController {@Autowired Private LoadBalancerClient LoadBalancerClient; @Autowired Private RestTemplate RestTemplate; @GetMapping ("/loadInstance") @ResponseBody Public String loadInstance () {serviceInstance pilih = this.loadBalancerClient.Choose ("client-87"); System.out.println (pilih.getServiceId ()+":"+pilih.getHost ()+":"+pilih.getport ()); return choose.getServiceId () + ":" + pilih.getHost () + ":" + pilih.getport (); }} Paket com.cn; impor org.springframework.boot.springapplication; impor org.springframework.boot.autoconfigure.springbootApplication; import org.springframework.cloud.client.discovery.enablediscoverycoveryclient;/** ** ** @diclip.discovery.enablediscovery; 535504 *@Create: 2018-06-15 16:05 **/@springbootApplication@enableDiscoveryClientPublic kelas ClientApplication {public static void main (string [] args) {springApplication.run (clientApplication.class, args); }}EureKaclient2:
pom.xml konsisten dengan eureKaclient1
application.xml:
server.port = 8763spring.application.name = client-87eureka.client.service-url.defaultzone = http: // localhost: 8761/eureka
ClientController.java:
Paket com.cn.contorller; impor org.springframework.steretype.controller; impor org.springframework.web.bind.annotation.getMapping; impor org.springframwork.web.bind.annotation.responseBody;/** ** @program: springccripe.notation 2018-06-15 16:12 **/ @controllerPublic clientController kelas {@getMapping ("/getUser") @ResponseBody public string getUser () {System.out.println ("Dapatkan pengguna sukses"); mengembalikan "Dapatkan pengguna sukses"; }}2. Urutan startup:
①. MULAI EUREKASERVER =》 eureKaclient1 =》 eureKaclient2;
②. Kemudian ubah server.port = 8763 dari application.properties di eureKaclient2 ke server.port = 8764, dan mulai proyek lagi;
③. Buka halaman konfigurasi eurekaserver (http: // localhost: 8761/), sebagai berikut:
④. Kami memasukkan http: // localhost: 8762/loadInstance di bilah alamat dan menyegarkannya beberapa kali. Anda akan menemukan bahwa instance port berbeda setiap kali kami menyebutnya, seperti yang ditunjukkan pada gambar di bawah ini:
⑤. Kami melihat konsol, seperti yang ditunjukkan pada gambar:
Pada titik ini, pita sudah dimulai. Bukankah itu sangat sederhana? Tapi ini hanya aplikasi paling sederhana, dan ini buang -buang waktu ... tidak ada akhir untuk belajar!
Kode contoh: https://gitee.com/lfalex/springcloud-example