مقدمة: بنية الخدمات الصغيرة لها حتما حالات متعددة من الخدمات الدقيقة واحدة. فكيف يمكن للعميل تخصيص طلبات لحالات الخدمات المجهرية المتعددة؟ هنا نحتاج إلى استخدام موازنة التحميل
1. مقدمة إلى الشريط
RIBBON عبارة عن موازن تحميل من Netflix ، والذي يساعد على التحكم في سلوك عملاء HTTP و TCP. بعد تكوين قائمة عناوين مزود الخدمة لـ RIBBON ، يمكن لـ RIBBON مساعدة المستهلكين تلقائيًا على الطلب بناءً على بعض خوارزمية موازنة التحميل. يوفر لنا Ribbon الكثير من خوارزميات موازنة التحميل افتراضيًا ، مثل الاقتراع ، والعشوائية ، وما إلى ذلك ، والتي يمكن تخصيصها أيضًا ؛
Github Ribbon: https://github.com/netflix/ribbon
عند استخدام Ribbon و Eureka في SpringCloud ، سيحصل Ribbon تلقائيًا على قائمة عناوين مزود الخدمة من Eurekaserver واستنادًا إلى خوارزمية موازنة التحميل.
2. الشريط القتال الفعلي
1. إنشاء eurekaserver ، eurekaclient1 ، eurekaclient2. لقد ذكرت استخدام Eureka من قبل ، لذلك هنا الكود:
eurekaserver:
serverapplication.java
@springbootapplication@enableeurekaserverpublic class serverapplication {public static void main (string [] args) {springapplication.run (serverapplication.class ، args) ؛ }}pom.xml
<؟ XSI: schemalocation = "http://maven.apache.org/pom/4.0.0 <soph> 1.0-snapshot </version> <properties> <project.build.sourceencoding> utf-8 </project.build.sourceencoding> <java.version> 1.8 </java.version> </properties> <StifactId> Spring-Boot-Starter-Parent </stifactid> <الإصدار> 1.5.13 <StifactId> spring-cloud-starter-eureka-server </stifactid> </perence> </premited> </reperency> </reperency <type> pom </type> <scope> استيراد </scope> </sependency> </respency> </dependencymanagement> <!-إضافة مكون إضافي من spring-boot maven-> <build> <culsins> <clupin> <roupiD> org.springframework.boot </groupiD> </build> </project>
application.properties
server.port = 8761#ملاحظة: هذين التكوين صحيحان بشكل افتراضي. يجب أن تتغير إلى خطأ ، وإلا سيتم الإبلاغ عن خطأ. يشير خادم Connect Connect# إلى ما إذا كان يجب تسجيل نفسه على eurekaserver eureka.client.register-with-eureka = false# يشير إلى ما إذا كان سيتم الحصول على معلومات التسجيل من eurekaserver eureka.client.fetch-registry = passionureka.client.service-url.defaultzone = http: // localhost: 8761/eureka
eurekaclient1:
pom.xml
<؟ XSI: schemalocation = "http://maven.apache.org/pom/4.0.0 <soph> 1.0-snapshot </version> <properties> <project.build.sourceencoding> utf-8 </project.build.sourceencoding> <java.version> 1.8 </java.version> </properties> <StifactId> Spring-Boot-Starter-Parent </stifactid> <الإصدار> 1.5.13 <roupl> org.springframework.cloud </groupId> <Stifactid> spring-cloud-starter-eureka </shintifactid> </premited> </sependency> </respency> </rependency> <sperency> <sperive> edgware.sr3 </splex> <type> pom </type> <scope> استيراد </scope> </premined> </reperency> </sependencymanagement> <!-أضف مكون الإضافات الزنبركية maven-> <build> <clupins> <culsin> <StifactId> Spring-Boot-Maven-Plugin </stifactid> </sultwing> </sults> </build> </project>
server.port = 8762spring.application.name = client-8762eureka.client.service-url.defaultzone = http: // localhost: 8761/eureka/
أضف مثيل الاتصال عن بُعد إلى الحاوية في فئة بدء التشغيل وأضف شرحًا توازنًا لتحميل لجعل RestTemplate لديهم القدرة على تحميل الموازنة:
@springbootapplication@enableScoveryClientpublic ClientApplication {public static void main (string [] args) {springapplication.run (clientapplication.class ، args) ؛ }/** * @Description: إضافة التعليق التوضيحي applanced لإضافة إمكانيات موازنة التحميل إلى RestTemplate * param: * reghurn: * author: * date: 2018/6/15 */ @bean @loach public retttemplate getRestTemplate () }}قم بإنشاء وحدة تحكم ، حقن حالات RestTemplate و LoadBalancerClient:
حزمة com.cn.controller ؛ استيراد org.springframework.beans.factory.annotation.autowired ؛ استيراد org.springframework.cloud.client.serviceInstance org.springframework.web.bind.annotation.getMapping ؛ استيراد org.springframework.web.bind.annotation.responsebody ؛ استيراد org.springframework.web.client.resttemplate ؛/** * program. **/ @ControlRpublic Class RIBBONCONTROLLER {autowired private loadbalancerclient loadBalancerClient ؛ @autowired private resttemplate resttemplate ؛ getMapping ("/loadInstance") Responsebody public string loadInstance () {serviceInstance اختر = this.loodbalancerclient.choose ("client-87") ؛ system.out.println (choice.getServiceId ()+":"+cyech.gethost ()+":"+cyech.getport ()) ؛ return choice.getServiceId () + ":" + cyech.gethost () + ":" + cyech.getport () ؛ }} حزمة com.cn ؛ استيراد org.springframework.boot.springapplication ؛ استيراد org.springframework.boot.autoconfigure.springbootapplication 535504 *create: 2018-06-15 16:05 **/@springbootapplication@enableScoveryClientpublic clientapplication {public static void main (String [] args) {springapplication.run (clientapplication.class ، args) ؛ }}eurekaclient2:
pom.xml متسقة مع eurekaclient1
application.xml:
server.port = 8763spring.application.name = client-87eureka.client.service-url.defaultzone = http: // localhost: 8761/eureka
clientController.java:
package com.cn.contorller ؛ استيراد org.springframework.steretype.controller ؛ استيراد org.springframework.web.bind.annotation.getMapping ؛ استيراد org.springframework.web.bind.annotation.responsebody ؛ 2018-06-15 16:12 **/ @controlpublic classcontroller {getMapping ("/getUser") recponsebody public getUser () {system.out.println ("الحصول على مستخدم ناجح") ؛ إرجاع "احصل على ناجحة للمستخدم" ؛ }}2. تسلسل بدء التشغيل:
①. start eurekaserver =》 eurekaclient1 =》 eurekaclient2 ؛
②. ثم قم بتغيير server.port = 8763 من التطبيق.
③. افتح صفحة تكوين eurekaserver (http: // localhost: 8761/) ، على النحو التالي:
④. ندخل http: // localhost: 8762/loadInstance في شريط العناوين وتحديثه عدة مرات. ستجد أن مثيلات المنفذ مختلفة في كل مرة نسميها ، كما هو موضح في الشكل أدناه:
⑤. نحن ننظر إلى وحدة التحكم ، كما هو موضح في الصورة:
في هذه المرحلة ، بدأ الشريط بالفعل. أليس الأمر بسيطًا جدًا؟ ولكن هذا مجرد تطبيق أبسط ، وهو مضيعة للوقت ... لا نهاية للتعلم!
رمز نموذج: https://gitee.com/lfalex/springcloud-example