1. مقدمة
في أنظمة هندسة Microservice ، نستخدم عادةً وسيط رسائل خفيف الوزن لإنشاء موضوع رسالة شائع لتوصيل جميع مثيلات الخدمات الصغيرة في النظام. نظرًا لأن الرسائل التي تم إنشاؤها في هذا الموضوع سيتم الاستماع إليها واستهلاكها من قبل جميع الحالات ، فإننا نسميها ناقل الرسائل.
2. وكيل الرسالة
وسيط الرسائل هو نموذج معماري للتحقق من الرسائل ونقله وتوجيهه. إنه بمثابة جدولة اتصال بين التطبيقات وتقليل التبعيات بين التطبيقات ، بحيث يمكن للتطبيقات فصل عمليات الاتصال بكفاءة. وسيط الرسائل هو منتج الوسيطة. جوهره هو برنامج توجيه الرسائل المستخدم لتلقي الرسائل وتوزيعها ، وإعادة توجيهها إلى التطبيق الصحيح بناءً على تدفق معالجة الرسائل المحددة. ويشمل بروتوكولات التواصل والرسائل المستقلة ، وتمكين الاتصالات الشبكة داخل المؤسسات وبينها. الغرض من تصميم الوكيل هو أن تكون قادرًا على تمرير الرسائل من التطبيق وأداء بعض العمليات الخاصة. فيما يلي سيناريوهات في تطبيقات المؤسسات حيث نحتاج غالبًا إلى استخدام وكيل الرسائل:
هناك بالفعل العديد من المنتجات مفتوحة المصدر ليستخدمها الجميع ، مثل:
3. SpringCloud+Rabbitmq
(1) لن يتم تفصيل مقدمة RabbitMQ والتركيب.
(2) pom.xml
<ependencies> <Rependency> <roupiD> org.springframework.boot </rougiD> <StifactId> Spring-Boot-Starter-Amqp </frishid> </sependency> <redenced> <roupiD> org.springframework.boot </groupiD> </premency> </تبعيات>
(3) application.yml
الربيع: التطبيق: الاسم: Rabbitmq-Hello Rabbitmq: المضيف: ***. ***. ***. ***. *** المنفذ: 5672 اسم المستخدم: كلمة مرور الضيف: ضيف
(4) المرسل
component public class sender {private static final logger log = loggerFactory.getLogger (sender.class) ؛ autowired amqptemplate amqptemplate ؛ public void send () {String Context = "Hello" + New Date () ؛ log.info ("المرسل:" + سياق) ؛ this.amqptemplate.convertandsend ("Hello" ، Context) ؛ }}(5) المتلقي
componentRabbitListener (queues = "hello") فئة عامة المتلقي {private static final logger log = loggerfactory.getLogger (reciver.class) ؛ rabbithandler public public process (String hello) {log.info ("receiver:" + hello) ؛ }}(6) إنشاء فئة تكوين RabbitMQ RabbitConfig
configuration الفئة العامة rabbitconfig {bean public queue helloqueue () {return new Queue ("Hello") ؛ }} (7) إنشاء فئة اختبار الوحدة لاتصال الرسائل بإنتاج الرسائل
Runwith (SpringJunit4ClassRunner.Class) springBoottest (الفئات = springCloudBusRabbitMqapPlication.class) class public helloapplicationTests {autowired private sender ؛ test public void hello () rems {sender.send () ؛ }} (8) اختبار ، تنفيذ HelloApplicationTests
(9) زيارة المضيف: 15672
4. تحويل التكوين العادي (دمج حافلة SpringCloud)
(1) pom.xml
<ependencies> <Rependency> <roupiD> org.springframework.cloud </groupId> <StifactId> starter-cloud-config </frinsid> </premited> <redence> <roupiD> org.springframework.boot </groupid> <roupl> org.springframework.cloud </groupId> <StifactId> Spring-Cloud-Cloud-eureka </stifactid> </reperence> <reperence> <roupiD> org.springframework.cloud </groupid> <roupl> org.springframework.boot </groupId> <StifactId> Spring-boot-starter-actuator </attifactid> </premited> <rependency> <rouped> org.springframework.boo </groupid> </التبعيات>
(2) bootstrap.properties
spring.application.name = configspace spring.cloud.config.label = master spring.cloud.config.profile = dev spring.cloud.config.uri = http: // localhost: 5588/eureka.client.serviceurl.defaultzone = http: // localhost: 5555/eureka Spring.RabbitMq.host = 118.89.237.88 Spring.RabbitMq.Port = 5672 Spring.RabbitMq.Username = Guest Spring.RabbitMq.Password = Guest Management.Security.enabled = false
(3) لا حاجة لتغيير الآخرين
خامسا الاختبار
(1) إعداد الاختبار
مركز تسجيل الخدمة ، Eurekaserver ، Port 5555 ؛
مركز تكوين موزع ، configserver ، مع المنفذ 5588 ؛
تكوينين موزعة ، التكوين ، المنافذ هي 5589 و 5590 ؛ (2) زيارة http: // localhost: 5589/from
(3) زيارة http: // localhost: 5590/from
rabbitmq:
(4) انتقل إلى المستودع لتعديل قيمة كلمة المرور
من = git-dev-v1.0 بواسطة springcloud config-server username = springcloud password = 1234567890
(5) طلب النشر http: // localhost: 5589/bus/refresh أو http: // localhost: 5590/bus/refr
بعد طلب ناجح ، سيقوم Config-Client بإعادة قراءة ملف التكوين.
(6) زيارة مرة أخرى
إذا طلبت المنشور: http: // localhost: 5590/bus/refresh ، يرجى زيارة http: // localhost: 5589/from
بالإضافة إلى ذلك ، يمكن أن تحدد واجهة/bus/refresh الخدمة ، أي استخدام المعلمة "اسم المستخدم" ، مثل "/bus/refresh؟ destination = username: **" لتحديث جميع الخدمات التي اسم خدمتها ، بغض النظر عن عنوان IP.
(7) العمارة
(8) تعديل العمارة
نظرًا لأن واجهة /bus /refresh من ناقل SpringCloud توفر معلمات لتحديثات التكوين للخدمات والحالات ، فإن بنيةنا يمكن أن تقوم أيضًا ببعض التعديلات وفقًا لذلك. في الهندسة المعمارية السابقة ، تحديث تكوين الخدمة المطلوبة لإرسال طلب إلى مثيل في الخدمة المحددة ثم يؤدي إلى تحديث تكوين مجموعة الخدمة بأكملها. على الرغم من أنه يمكن تنفيذ الوظائف ، فإن النتيجة هي أن مثيلات التطبيق التي نحددها ستكون مختلفة عن مثيلات التطبيق الأخرى في الكتلة ، مما سيزيد من التعقيد داخل الكتلة ويكون ضارًا بالعمل المستقبلي والصيانة. على سبيل المثال ، إذا كان من الضروري ترحيل مثيل الخدمة ، فيجب علينا تعديل التكوين في خطاف الويب ، وما إلى ذلك ، لذلك ، يجب أن نجعل كل عقدة في نظير مجموعة الخدمة قدر الإمكان.
لذلك ، قمنا ببعض التعديلات على الهندسة المعمارية السابقة ، كما هو موضح في الشكل أدناه:
تم إجراء التغييرات التالية:
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.