الاتصال بخادم يوريكا المدار ل Spring في Azure Container Apps
يوريكا Server for Spring هو سجل خدمة يسمح للخدمات المصغرة بتسجيل نفسها واكتشاف خدمات أخرى. يتوفر خادم Eureka ل Spring كمكون Azure Container Apps. يمكنك ربط تطبيق الحاوية الخاص بك بخادم Eureka ل Spring للتسجيل التلقائي باستخدام خادم يوريكا.
في هذا البرنامج التعليمي، تتعلم كيفية:
- إنشاء خادم Eureka لمكون Spring Java.
- اربط تطبيق الحاوية الخاص بك بخادم Eureka لمكون Spring Java.
هام
يستخدم هذا البرنامج التعليمي الخدمات التي يمكن أن تؤثر على فاتورة Azure. إذا قررت المتابعة، فتأكد من حذف الموارد المميزة في هذه المقالة لتجنب الفوترة غير المتوقعة.
المتطلبات الأساسية
- حساب Azure مع اشتراك نشط. إذا لم يكن لديك حساب بالفعل، يمكنك إنشاء حساب مجانا.
- Azure CLI.
الاعتبارات
عند تشغيل خادم يوريكا ل Spring in Container Apps، كن على دراية بالتفاصيل التالية:
العنصر | الشرح |
---|---|
النطاق | يعمل مكون Eureka Server for Spring في نفس البيئة مثل تطبيق الحاوية المتصل. |
تغير الحجم | لا يمكن تغيير حجم مكون خادم Eureka ل Spring. يتم تعيين خصائص minReplicas التحجيم و maxReplicas على 1 . لتحقيق قابلية وصول عالية، راجع إنشاء خدمة يوريكا عالية التوفر في تطبيقات الحاوية. |
الموارد | تم إصلاح تخصيص موارد الحاوية لخادم Eureka ل Spring. عدد الذاكرات الأساسية لوحدة المعالجة المركزية هو 0.5، وحجم الذاكرة هو 1 Gi. |
التسعير | يقع خادم Eureka لفواتير Spring ضمن التسعير القائم على الاستهلاك. تتم فوترة الموارد التي تستهلكها مكونات Java المدارة بأسعار نشطة/خبيثة. يمكنك حذف المكونات التي لم تعد قيد الاستخدام لإيقاف الفوترة. |
Binding | تتصل تطبيقات الحاوية بمكون Eureka Server for Spring عبر ربط. تدخل الروابط التكوينات في متغيرات بيئة تطبيق الحاوية. بعد تأسيس الربط، يمكن لتطبيق الحاوية قراءة قيم التكوين من متغيرات البيئة والاتصال بمكون خادم Eureka ل Spring. |
الإعداد
قبل البدء في العمل مع مكون يوريكا Server for Spring، تحتاج أولا إلى إنشاء الموارد المطلوبة.
قم بتشغيل الأوامر التالية لإنشاء مجموعة الموارد الخاصة بك في بيئة تطبيق حاوية.
إنشاء متغيرات لدعم تكوين التطبيق الخاص بك. يتم توفير هذه القيم لك لأغراض هذا الدرس.
export LOCATION=eastus export RESOURCE_GROUP=my-services-resource-group export ENVIRONMENT=my-environment export EUREKA_COMPONENT_NAME=eureka export APP_NAME=my-eureka-client export IMAGE="mcr.microsoft.com/javacomponents/samples/sample-service-eureka-client:latest"
المتغير الوصف LOCATION
موقع منطقة Azure حيث تقوم بإنشاء تطبيق الحاوية ومكون Java. ENVIRONMENT
اسم بيئة تطبيق الحاوية لتطبيق العرض التوضيحي الخاص بك. RESOURCE_GROUP
اسم مجموعة موارد Azure لتطبيق العرض التوضيحي الخاص بك. EUREKA_COMPONENT_NAME
اسم مكون Java الذي تم إنشاؤه لتطبيق الحاوية. في هذه الحالة، يمكنك إنشاء مكون خادم يوريكا ل Spring Java. IMAGE
صورة الحاوية المستخدمة في تطبيق الحاوية. سجل الدخول إلى Azure باستخدام Azure CLI.
az login
قم بإنشاء مجموعة موارد.
az group create --name $RESOURCE_GROUP --location $LOCATION
إنشاء بيئة تطبيق الحاوية.
az containerapp env create \ --name $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --location $LOCATION
إنشاء مكون خادم Eureka ل Spring Java
الآن بعد أن أصبح لديك بيئة موجودة، يمكنك إنشاء تطبيق الحاوية الخاص بك وربطه بمثيل مكون Java لخادم Eureka ل Spring.
إنشاء مكون خادم Eureka ل Spring Java.
az containerapp env java-component eureka-server-for-spring create \ --environment $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --name $EUREKA_COMPONENT_NAME
اختياري: تحديث خادم يوريكا لتكوين مكون Spring Java.
az containerapp env java-component eureka-server-for-spring update \ --environment $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --name $EUREKA_COMPONENT_NAME --configuration eureka.server.renewal-percent-threshold=0.85 eureka.server.eviction-interval-timer-in-ms=10000
ربط تطبيق الحاوية الخاص بك بخادم يوريكا لمكون Spring Java
قم بإنشاء تطبيق الحاوية وربطه بخادم Eureka لمكون Spring.
az containerapp create \ --name $APP_NAME \ --resource-group $RESOURCE_GROUP \ --environment $ENVIRONMENT \ --image $IMAGE \ --min-replicas 1 \ --max-replicas 1 \ --ingress external \ --target-port 8080 \ --bind $EUREKA_COMPONENT_NAME \ --query properties.configuration.ingress.fqdn
انسخ عنوان URL لتطبيقك إلى محرر نصوص بحيث يمكنك استخدامه في خطوة قادمة.
ارجع إلى تطبيق الحاوية في المدخل. انسخ عنوان URL لتطبيقك إلى محرر نصوص بحيث يمكنك استخدامه في خطوة قادمة.
انتقل إلى /allRegistrationStatus
المسار لعرض جميع التطبيقات المسجلة مع مكون Eureka Server for Spring.
يقوم الربط بإدخال عدة تكوينات في التطبيق كمتغيرات بيئة، في المقام الأول الخاصية eureka.client.service-url.defaultZone
. تشير هذه الخاصية إلى نقطة النهاية الداخلية لمكون Java لخادم Eureka.
يقوم الربط أيضا بإدخال الخصائص التالية:
"eureka.client.register-with-eureka": "true"
"eureka.client.fetch-registry": "true"
"eureka.instance.prefer-ip-address": "true"
eureka.client.register-with-eureka
تم تعيين الخاصية إلى true
لفرض التسجيل مع خادم يوريكا. يقوم هذا التسجيل بالكتابة فوق الإعداد المحلي في application.properties
، من خادم التكوين وهكذا. إذا كنت تريد تعيينه إلى false
، يمكنك الكتابة فوقه عن طريق تعيين متغير بيئة في تطبيق الحاوية.
eureka.instance.prefer-ip-address
يتم تعيين الخاصية إلى true
بسبب قاعدة تحليل نظام اسم المجال المحددة في بيئة تطبيق الحاوية. لا تقم بتعديل هذه القيمة بحيث لا تقطع الربط.
اختياري: إلغاء ربط تطبيق الحاوية من مكون خادم يوريكا ل Spring Java
لإزالة ربط من تطبيق حاوية، استخدم --unbind
الخيار .
az containerapp update \
--name $APP_NAME \
--unbind $JAVA_COMPONENT_NAME \
--resource-group $RESOURCE_GROUP
عرض التطبيق من خلال لوحة معلومات
هام
لعرض لوحة المعلومات، يجب أن يكون لديك على الأقل Microsoft.App/managedEnvironments/write
الدور المعين لحسابك على مورد البيئة المدارة. يمكنك تعيين Owner
دور أو Contributor
على المورد بشكل صريح. يمكنك أيضا اتباع الخطوات لإنشاء تعريف دور مخصص وتعيينه إلى حسابك.
إشعار
لوحة المعلومات غير متوفرة في Azure China 21Vianet.
إنشاء تعريف دور مخصص.
az role definition create --role-definition '{ "Name": "<YOUR_ROLE_NAME>", "IsCustom": true, "Description": "Can access managed Java Component dashboards in managed environments", "Actions": [ "Microsoft.App/managedEnvironments/write" ], "AssignableScopes": ["/subscriptions/<SUBSCRIPTION_ID>"] }'
تأكد من استبدال
<SUBSCRIPTION_ID>
العنصر النائب فيAssignableScopes
القيمة بمعرف الاشتراك الخاص بك.تعيين الدور المخصص إلى حسابك على مورد بيئة مدارة.
احصل على معرف المورد للبيئة المدارة:
export ENVIRONMENT_ID=$(az containerapp env show \ --name $ENVIRONMENT --resource-group $RESOURCE_GROUP \ --query id \ --output tsv)
تعيين الدور إلى حسابك.
قبل تشغيل هذا الأمر، استبدل العناصر النائبة - المشار إليها بواسطة الأقواس
<>
- بمعرف المستخدم أو الخدمة الأساسي واسم دورك.az role assignment create \ --assignee <USER_OR_SERVICE_PRINCIPAL_ID> \ --role "<ROLE_NAME>" \ --scope $ENVIRONMENT_ID
إشعار
<USER_OR_SERVICE_PRINCIPAL_ID>
يجب أن تكون القيمة عادة الهوية التي تستخدمها للوصول إلى مدخل Microsoft Azure.<ROLE_NAME>
القيمة هي الاسم الذي قمت بتعيينه في الخطوة 1.احصل على عنوان URL للوحة معلومات خادم يوريكا ل Spring.
az containerapp env java-component eureka-server-for-spring show \ --environment $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --name $EUREKA_COMPONENT_NAME \ --query properties.ingress.fqdn \ --output tsv
يقوم هذا الأمر بإرجاع عنوان URL الذي يمكنك استخدامه للوصول إلى خادم Eureka للوحة معلومات Spring. باستخدام لوحة المعلومات، يمكنك أيضا رؤية تطبيق الحاوية، كما هو موضح في لقطة الشاشة التالية.
اختياري: دمج خادم يوريكا ل Spring والمسؤول لمكونات Spring Java
إذا كنت ترغب في دمج خادم يوريكا ل Spring والمسؤول لمكونات Spring Java، فشاهد دمج المسؤول المدار ل Spring مع خادم يوريكا ل Spring.
تنظيف الموارد
الموارد التي تم إنشاؤها في هذا البرنامج التعليمي لها تأثير على فاتورة Azure. إذا كنت لن تستخدم هذه الخدمات على المدى الطويل، فقم بتشغيل الأمر التالي لإزالة كل شيء قمت بإنشائه في هذا البرنامج التعليمي.
az group delete --resource-group $RESOURCE_GROUP
قائمة التكوين المسموح بها لخادم Eureka ل Spring
تصف الأقسام التالية التكوينات المدعومة. لمزيد من المعلومات، راجع خادم Spring Cloud Eureka.
إشعار
يرجى إرسال تذاكر الدعم لطلبات الميزات الجديدة.
خيارات الإعداد
az containerapp update
يستخدم الأمر المعلمة --configuration
للتحكم في كيفية تكوين خادم Eureka ل Spring. يمكنك استخدام معلمات متعددة في وقت واحد طالما أنها مفصولة بمسافة. لمزيد من المعلومات، راجع خادم Spring Cloud Eureka.
تتوفر إعدادات التكوين التالية في eureka.server
خاصية التكوين:
Name | الوصف | القيمة الافتراضية |
---|---|---|
eureka.server.enable-self-preservation |
عند التمكين، يتتبع الخادم عدد التجديدات التي يجب أن يتلقاها من الخادم. في أي وقت ينخفض عدد التجديدات إلى أقل من النسبة المئوية الحد كما هو محدد بواسطة eureka.server.renewal-percent-threshold . يتم تعيين القيمة الافتراضية إلى true في خادم Eureka الأصلي، ولكن في مكون Eureka Server Java، يتم تعيين القيمة الافتراضية إلى false . راجع قيود يوريكا Server لمكون Spring Java. |
false |
eureka.server.renewal-percent-threshold |
الحد الأدنى للنسبة المئوية للتجديدات المتوقعة من العملاء في الفترة المحددة بواسطة eureka.server.renewal-threshold-update-interval-ms . إذا انخفضت التجديدات إلى أقل من الحد، يتم تعطيل انتهاء الصلاحية إذا eureka.server.enable-self-preservation تم تمكينها. |
0.85 |
eureka.server.renewal-threshold-update-interval-ms |
الفاصل الزمني الذي يجب تحديث الحد به - كما هو محدد في eureka.server.renewal-percent-threshold . |
0 |
eureka.server.expected-client-renewal-interval-seconds |
الفاصل الزمني الذي يتوقع من العملاء إرسال رسالة كشف أخطاء الاتصال الخاصة بهم. افتراضيا إلى 30 ثانية. إذا أرسل العملاء رسالة كشف أخطاء الاتصال بتردد مختلف، على سبيل المثال، كل 15 ثانية، فيجب ضبط هذه المعلمة وفقا لذلك، وإلا فلن يعمل الحفاظ على الذات كما هو متوقع. | 30 |
eureka.server.response-cache-auto-expiration-in-seconds |
يحصل على الوقت الذي يجب الاحتفاظ فيه بحمولة السجل في ذاكرة التخزين المؤقت إذا لم يتم إبطالها بواسطة أحداث التغيير. | 180 |
eureka.server.response-cache-update-interval-ms |
يحصل على الفاصل الزمني الذي يجب تحديث ذاكرة التخزين المؤقت للحمولة للعميل به. | 0 |
eureka.server.use-read-only-response-cache |
com.netflix.eureka.registry.ResponseCache يستخدم حاليا استراتيجية التخزين المؤقت من مستويين للاستجابات.
readWrite ذاكرة تخزين مؤقت مع نهج انتهاء صلاحية، وذاكرة readonly تخزين مؤقت يتم تخزينها مؤقتا دون انتهاء الصلاحية. |
true |
eureka.server.disable-delta |
يتحقق لمعرفة ما إذا كان يمكن تقديم معلومات دلتا للعميل أم لا. | false |
eureka.server.retention-time-in-m-s-in-delta-queue |
احصل على الوقت الذي يجب تخزين معلومات دلتا فيه مؤقتا للعملاء لاسترداد القيمة دون فقدانها. | 0 |
eureka.server.delta-retention-timer-interval-in-ms |
احصل على الفاصل الزمني الذي يجب أن تستيقظ به مهمة التنظيف وتحقق من معلومات دلتا منتهية الصلاحية. | 0 |
eureka.server.eviction-interval-timer-in-ms |
احصل على الفاصل الزمني الذي يجب أن تنبه به المهمة التي تنتهي بها المثيلات وتشغلها. | 60000 |
eureka.server.sync-when-timestamp-differs |
التحقق من مزامنة المثيلات عند اختلاف الطابع الزمني. | true |
eureka.server.rate-limiter-enabled |
يشير إلى ما إذا كان يجب تمكين محدد المعدل أو تعطيله. | false |
eureka.server.rate-limiter-burst-size |
محدد المعدل، خاصية خوارزمية مستودع الرمز المميز. | 10 |
eureka.server.rate-limiter-registry-fetch-average-rate |
محدد المعدل، خاصية خوارزمية مستودع الرمز المميز. تحديد متوسط معدل الطلب المفروض. | 500 |
eureka.server.rate-limiter-privileged-clients |
قائمة بالعملاء المعتمدين. هذا بالإضافة إلى عملاء java القياسيين eureka. | N/A |
eureka.server.rate-limiter-throttle-standard-clients |
الإشارة إلى ما إذا كان العملاء القياسيون يحدون من المعدل. إذا تم تعيينه إلى false ، فإن العملاء غير القياسيين فقط هم من محدودي السعر. |
false |
eureka.server.rate-limiter-full-fetch-average-rate |
محدد المعدل، خاصية خوارزمية مستودع الرمز المميز. تحديد متوسط معدل الطلب المفروض. | 100 |
التكوينات الشائعة
- تسجيل التكوينات ذات الصلة:
logging.level.*
logging.group.*
- يجب منع أي تكوينات أخرى تحت
logging.*
مساحة الاسم - على سبيل المثال، يجب حظر كتابة ملفات السجل باستخدامlogging.file
.
الاتصال بين التطبيقات
يوضح لك هذا المثال كيفية كتابة تعليمة Java البرمجية للاتصال بين التطبيقات المسجلة مع مكون Eureka Server for Spring. عندما تكون تطبيقات الحاوية مرتبطة ب Eureka، فإنها تتواصل مع بعضها البعض من خلال خادم يوريكا.
ينشئ المثال تطبيقين، المتصل والمتصل. يتصل كلا التطبيقين بين بعضهما البعض باستخدام مكون خادم يوريكا ل Spring. يعرض تطبيق المتصل نقطة نهاية يتم استدعاؤها بواسطة تطبيق المتصل.
إنشاء تطبيق المتصل. قم بتمكين عميل Eureka في تطبيق Spring Boot الخاص بك عن طريق إضافة التعليق التوضيحي
@EnableDiscoveryClient
إلى فئتك الرئيسية.@SpringBootApplication @EnableDiscoveryClient public class CalleeApplication { public static void main(String[] args) { SpringApplication.run(CalleeApplication.class, args); } }
إنشاء نقطة نهاية في تطبيق المتصل الذي يتم استدعاؤه بواسطة تطبيق المتصل.
@RestController public class CalleeController { @GetMapping("/call") public String calledByCaller() { return "Hello from Application callee!"; } }
تعيين اسم تطبيق المتصل في ملف تكوين التطبيق - على سبيل المثال، في application.yml.
spring.application.name=callee
إنشاء تطبيق المتصل.
أضف التعليق التوضيحي
@EnableDiscoveryClient
لتمكين وظيفة عميل Eureka. أيضا، قم بإنشاء beanWebClient.Builder
مع@LoadBalanced
التعليق التوضيحي لإجراء مكالمات متوازنة التحميل إلى خدمات أخرى.@SpringBootApplication @EnableDiscoveryClient public class CallerApplication { public static void main(String[] args) { SpringApplication.run(CallerApplication.class, args); } @Bean @LoadBalanced public WebClient.Builder loadBalancedWebClientBuilder() { return WebClient.builder(); } }
إنشاء وحدة تحكم في تطبيق المتصل الذي يستخدم
WebClient.Builder
لاستدعاء تطبيق المتصل باستخدام اسم التطبيق الخاص به، المتصل.@RestController public class CallerController { @Autowired private WebClient.Builder webClientBuilder; @GetMapping("/call-callee") public Mono<String> callCallee() { return webClientBuilder.build() .get() .uri("http://callee/call") .retrieve() .bodyToMono(String.class); } }
الآن لديك تطبيق المتصل والمتصل الذي يتصل مع بعضها البعض باستخدام يوريكا Server لمكونات Spring Java. تأكد من تشغيل كلا التطبيقين وربطهما بخادم يوريكا قبل اختبار /call-callee
نقطة النهاية في تطبيق المتصل.
القيود
- يأتي مكون Eureka Server Java مع تكوين افتراضي، ،
eureka.server.enable-self-preservation
تم تعيينه إلىfalse
. يساعد هذا التكوين الافتراضي على تجنب الأوقات التي لا يتم فيها حذف المثيلات بعد تمكين الاحتفاظ الذاتي. إذا تم حذف المثيلات مبكرا جدا، فقد يتم توجيه بعض الطلبات إلى مثيلات غير موجودة. إذا كنت تريد تغيير هذا الإعداد إلىtrue
، يمكنك الكتابة فوقه عن طريق تعيين التكوينات الخاصة بك في مكون Java. - لوحة معلومات يوريكا غير متوفرة في Azure China 21Vianet.