مشاركة عبر


الاتصال بخادم يوريكا المدار ل Spring في Azure Container Apps

يوريكا Server for Spring هو سجل خدمة يسمح للخدمات المصغرة بتسجيل نفسها واكتشاف خدمات أخرى. يتوفر خادم Eureka ل Spring كمكون Azure Container Apps. يمكنك ربط تطبيق الحاوية الخاص بك بخادم Eureka ل Spring للتسجيل التلقائي باستخدام خادم يوريكا.

في هذا البرنامج التعليمي، تتعلم كيفية:

  • إنشاء خادم Eureka لمكون Spring Java.
  • اربط تطبيق الحاوية الخاص بك بخادم Eureka لمكون Spring Java.

هام

يستخدم هذا البرنامج التعليمي الخدمات التي يمكن أن تؤثر على فاتورة Azure. إذا قررت المتابعة، فتأكد من حذف الموارد المميزة في هذه المقالة لتجنب الفوترة غير المتوقعة.

المتطلبات الأساسية

الاعتبارات

عند تشغيل خادم يوريكا ل 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، تحتاج أولا إلى إنشاء الموارد المطلوبة.

قم بتشغيل الأوامر التالية لإنشاء مجموعة الموارد الخاصة بك في بيئة تطبيق حاوية.

  1. إنشاء متغيرات لدعم تكوين التطبيق الخاص بك. يتم توفير هذه القيم لك لأغراض هذا الدرس.

    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 صورة الحاوية المستخدمة في تطبيق الحاوية.
  2. سجل الدخول إلى Azure باستخدام Azure CLI.

    az login
    
  3. قم بإنشاء مجموعة موارد.

    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  4. إنشاء بيئة تطبيق الحاوية.

    az containerapp env create \
      --name $ENVIRONMENT \
      --resource-group $RESOURCE_GROUP \
      --location $LOCATION
    

إنشاء مكون خادم Eureka ل Spring Java

الآن بعد أن أصبح لديك بيئة موجودة، يمكنك إنشاء تطبيق الحاوية الخاص بك وربطه بمثيل مكون Java لخادم Eureka ل Spring.

  1. إنشاء مكون خادم Eureka ل Spring Java.

    az containerapp env java-component eureka-server-for-spring create \
        --environment $ENVIRONMENT \
        --resource-group $RESOURCE_GROUP \
        --name $EUREKA_COMPONENT_NAME
    
  2. اختياري: تحديث خادم يوريكا لتكوين مكون 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

  1. قم بإنشاء تطبيق الحاوية وربطه بخادم 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
    
  2. انسخ عنوان 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.

  1. إنشاء تعريف دور مخصص.

    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 القيمة بمعرف الاشتراك الخاص بك.

  2. تعيين الدور المخصص إلى حسابك على مورد بيئة مدارة.

    احصل على معرف المورد للبيئة المدارة:

    export ENVIRONMENT_ID=$(az containerapp env show \
        --name $ENVIRONMENT --resource-group $RESOURCE_GROUP \
        --query id \
        --output tsv)
    
  3. تعيين الدور إلى حسابك.

    قبل تشغيل هذا الأمر، استبدل العناصر النائبة - المشار إليها بواسطة الأقواس <> - بمعرف المستخدم أو الخدمة الأساسي واسم دورك.

    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.

  4. احصل على عنوان 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 والمسؤول لمكونات 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. يعرض تطبيق المتصل نقطة نهاية يتم استدعاؤها بواسطة تطبيق المتصل.

  1. إنشاء تطبيق المتصل. قم بتمكين عميل Eureka في تطبيق Spring Boot الخاص بك عن طريق إضافة التعليق التوضيحي @EnableDiscoveryClient إلى فئتك الرئيسية.

    @SpringBootApplication
    @EnableDiscoveryClient
    public class CalleeApplication {
      public static void main(String[] args) {
        SpringApplication.run(CalleeApplication.class, args);
      }
    }
    
  2. إنشاء نقطة نهاية في تطبيق المتصل الذي يتم استدعاؤه بواسطة تطبيق المتصل.

    @RestController
    public class CalleeController {
    
        @GetMapping("/call")
        public String calledByCaller() {
            return "Hello from Application callee!";
        }
    }
    
  3. تعيين اسم تطبيق المتصل في ملف تكوين التطبيق - على سبيل المثال، في application.yml.

    spring.application.name=callee
    
  4. إنشاء تطبيق المتصل.

    أضف التعليق التوضيحي @EnableDiscoveryClient لتمكين وظيفة عميل Eureka. أيضا، قم بإنشاء bean WebClient.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();
      }
    }
    
  5. إنشاء وحدة تحكم في تطبيق المتصل الذي يستخدم 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.

الخطوات التالية

دمج المسؤول المدار ل Spring مع خادم يوريكا ل Spring