Azure Container Apps'da yönetilen bir Spring için Eureka Server'a bağlanma

Spring için Eureka Server, mikro hizmetlerin kendilerini kaydetmesine ve diğer hizmetleri keşfetmesine olanak tanıyan bir hizmet kayıt defteridir. Spring için Eureka Server, Azure Container Apps bileşeni olarak kullanılabilir. Eureka sunucusuna otomatik kayıt için kapsayıcı uygulamanızı Spring için Eureka Server'a bağlayabilirsiniz.

Bu öğreticide aşağıdakilerin nasıl yapılacağını öğreneceksiniz:

  • Spring Java bileşeni için bir Eureka Sunucusu oluşturun.
  • Kapsayıcı uygulamanızı Spring için Eureka Server Java bileşenine bağlayın.

Önemli

Bu öğreticide Azure faturanızı etkileyebilecek hizmetler kullanılır. Takip etmeye karar verirseniz, beklenmeyen faturalamayı önlemek için bu makalede öne çıkan kaynakları sildiğinizden emin olun.

Önkoşullar

Dikkat edilmesi gereken noktalar

Container Apps'te Spring için Eureka Server'ı çalıştırdığınızda aşağıdaki ayrıntılara dikkat edin:

Öğe Açıklama
Kapsam Spring için Eureka Sunucusu bileşeni, bağlı kapsayıcı uygulamasıyla aynı ortamda çalışır.
Ölçeklendirme Spring için Eureka Sunucusu bileşeni ölçeklendirilemiyor. Ölçeklendirme özellikleri minReplicas ve maxReplicas her ikisi de 1 olarak ayarlanır. Yüksek kullanılabilirlik elde etmek için Container Apps'te yüksek kullanılabilirlikte bir Eureka Hizmeti oluşturma'ya bakın.
Kaynaklar Eureka Server için Spring kapsayıcı kaynak tahsisi sabittir. CPU çekirdeklerinin sayısı, 0.5bellek boyutu ise şeklindedir 1 Gi.
Fiyatlandırma Spring için Eureka Server faturalaması tüketime dayalı fiyatlandırma kapsamındadır. Yönetilen Java bileşenleri tarafından tüketilen kaynaklar etkin/boşta kalma fiyatlarına göre faturalandırılır. Faturalamayı durdurmak için artık kullanımda olmayan bileşenleri silebilirsiniz.
Bağlama Kapsayıcı uygulamaları, bağlantı aracılığıyla Spring için bir Eureka Sunucu bileşenine bağlanır. Bağlamalar, yapılandırmaları kapsayıcı uygulaması ortam değişkenlerine ekler. Bağlama oluşturulduktan sonra kapsayıcı uygulaması ortam değişkenlerinden yapılandırma değerlerini okuyabilir ve Spring için Eureka Server bileşenine bağlanabilir.

Ayarlama

Spring için Eureka Server bileşeniyle çalışmaya başlamadan önce gerekli kaynakları oluşturmanız gerekir.

Kaynak grubunuzu bir kapsayıcı uygulaması ortamında oluşturmak için aşağıdaki komutları çalıştırın.

  1. Uygulama yapılandırmanızı desteklemek için değişkenler oluşturun. Bu değerler, bu dersin amaçları doğrultusunda size sağlanır.

    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"
    
    Değişken Açıklama
    LOCATION Kapsayıcı uygulamanızı ve Java bileşenini oluşturduğunuz Azure bölge konumu.
    ENVIRONMENT Tanıtım uygulamanız için kapsayıcı uygulamanın ortam adı.
    RESOURCE_GROUP Tanıtım uygulamanızın Azure kaynak grubu adı.
    EUREKA_COMPONENT_NAME Kapsayıcı uygulamanız için oluşturulan Java bileşeninin adı. Bu durumda Spring Java bileşeni için bir Eureka Server oluşturursunuz.
    IMAGE Kapsayıcı uygulamanızda kullanılan kapsayıcı görüntüsü.
  2. Azure CLI ile Azure oturum açın.

    az login
    
  3. Kaynak grubu oluşturun.

    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  4. Kapsayıcı uygulama ortamınızı oluşturun.

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

Spring Java bileşeni için Eureka Server oluşturma

Artık mevcut bir ortamınız olduğuna göre kapsayıcı uygulamanızı oluşturabilir ve Spring için Eureka Server'ın Java bileşen örneğine bağlayabilirsiniz.

  1. Spring Java için Eureka Server bileşenini oluşturun.

    az containerapp env java-component eureka-server-for-spring create \
        --environment $ENVIRONMENT \
        --resource-group $RESOURCE_GROUP \
        --name $EUREKA_COMPONENT_NAME
    
  2. İsteğe bağlı: Spring için Eureka Server Java bileşen yapılandırmasını güncelleştirin.

    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
    

Kapsayıcı uygulamanızı Spring için Eureka Server Java bileşenine bağlama

  1. Kapsayıcı uygulamasını oluşturun ve Spring için Eureka Server bileşenine bağlayın.

    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. Uygulamanızın URL'sini bir metin düzenleyicisine kopyalayarak gelecek bir adımda kullanabilirsiniz.

Portaldaki kapsayıcı uygulamaya geri dönün. Uygulamanızın URL'sini bir metin düzenleyicisine kopyalayarak gelecek bir adımda kullanabilirsiniz.

/allRegistrationStatus rotasına giderek Spring için Eureka Server bileşenine kayıtlı tüm uygulamaları görüntüleyebilirsiniz.

Bağlama, uygulamaya, başta eureka.client.service-url.defaultZone özelliği olmak üzere, çeşitli yapılandırmaları ortam değişkenleri olarak ekler. Bu özellik, Eureka Server Java bileşeninin iç uç noktasını gösterir.

Bağlama ayrıca aşağıdaki özellikleri de eklemektedir:

"eureka.client.register-with-eureka":    "true"
"eureka.client.fetch-registry":          "true"
"eureka.instance.prefer-ip-address":     "true"

eureka.client.register-with-eureka özelliği, true olarak, Eureka sunucusuna kaydı zorunlu hale getirmek için ayarlanır​. Bu kayıt, application.properties içindeki yerel ayarı yapılandırma sunucusundan gelen bilgilerle ve benzeri şekillerde değiştirir. olarak ayarlamak falseisterseniz, kapsayıcı uygulamanızda bir ortam değişkeni ayarlayarak üzerine yazabilirsiniz.

eureka.instance.prefer-ip-address özelliği, kapsayıcı uygulaması ortamındaki belirli etki alanı adı sistemi çözümleme kuralı nedeniyle true olarak ayarlanır. Bağlamayı bozmak için bu değeri değiştirmeyin.

İsteğe bağlı: Spring Java bileşeni için Eureka Server'dan kapsayıcı uygulamanızın bağlantısını kaldırın

Kapsayıcı uygulamasından bağlamayı kaldırmak için seçeneğini kullanın --unbind .

az containerapp update \
    --name $APP_NAME \
    --unbind $JAVA_COMPONENT_NAME \
    --resource-group $RESOURCE_GROUP

Uygulamayı pano aracılığıyla görüntüleme

Önemli

Panoyu görüntülemek için, yönetilen ortam kaynağında hesabınıza en az Microsoft.App/managedEnvironments/write rolünün atanmış olması gerekir. kaynakta Owner veya Contributor rolünü açıkça atayabilirsiniz. Ayrıca, özel bir rol tanımı oluşturmak ve bunu hesabınıza atamak için adımları izleyebilirsiniz.

Not

21Vianet tarafından işletilen Azure'da pano kullanılamıyor.

  1. Özel bir rol tanımı oluşturun.

    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> değerindeki AssignableScopes yer tutucuyu abonelik kimliğiniz ile değiştirdiğinizden emin olun.

  2. Özel rolü yönetilen bir ortam kaynağındaki hesabınıza atayın.

    Yönetilen ortamın kaynak kimliğini alın:

    export ENVIRONMENT_ID=$(az containerapp env show \
        --name $ENVIRONMENT --resource-group $RESOURCE_GROUP \
        --query id \
        --output tsv)
    
  3. Rolü hesabınıza atayın.

    Bu komutu çalıştırmadan önce, köşeli ayraçlarla gösterilen <> yer tutucuları kullanıcı veya hizmet sorumlusu kimliğiniz ve rol adınız ile değiştirin.

    az role assignment create \
        --assignee <USER_OR_SERVICE_PRINCIPAL_ID> \
        --role "<ROLE_NAME>" \
        --scope $ENVIRONMENT_ID
    

    Not

    <USER_OR_SERVICE_PRINCIPAL_ID> değeri genellikle Azure portalına erişmek için kullandığınız kimlik olmalıdır. <ROLE_NAME> Değer, 1. adımda atadığınız addır.

  4. Spring için Eureka Server panosunun URL'sini alın.

    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
    

    Bu komut, Spring için Eureka Sunucusu panosuna erişmek için kullanabileceğiniz URL'yi döndürür. Kontrol paneliyle, aşağıdaki ekran görüntüsünde gösterildiği gibi kapsayıcı uygulamanızı da görebilirsiniz.

    Spring için Eureka Server panosunu gösteren ekran görüntüsü.

İsteğe bağlı: Spring için Eureka Server ve Spring Java bileşenleri için Yönetici'yi tümleştirme

Spring için Eureka Server ve Spring Java bileşenleri için Yönetici'yi tümleştirmek istiyorsanız bkz. Spring için Yönetilen Yönetici'yi Spring için Eureka Server ile tümleştirme.

Kaynakları temizleme

Bu öğreticide oluşturulan kaynakların Azure faturanız üzerinde etkisi vardır. Bu hizmetleri uzun vadeli kullanmayacaksanız, bu öğreticide oluşturduğunuz her şeyi kaldırmak için aşağıdaki komutu çalıştırın.

az group delete --resource-group $RESOURCE_GROUP

Spring için Eureka Sunucunuz için izin verilen yapılandırma listesi

Aşağıdaki bölümlerde desteklenen yapılandırmalar açıklanmaktadır. Daha fazla bilgi için bkz . Spring Cloud Eureka Server.

Not

Yeni özellik istekleri için destek biletleri gönderebilirsiniz.

Yapılandırma seçenekleri

az containerapp update komutu, Spring için Eureka Sunucusunun nasıl yapılandırıldığını denetlemek amacıyla --configuration parametresini kullanır. Bir boşlukla ayrıldığı sürece aynı anda birden çok parametre kullanabilirsiniz. Daha fazla bilgi için bkz . Spring Cloud Eureka Server.

Yapılandırma özelliğinde eureka.server aşağıdaki yapılandırma ayarları kullanılabilir:

Veri Akışı Adı Açıklama Varsayılan değer
eureka.server.enable-self-preservation Etkinleştirildiğinde, sunucu sunucudan alması gereken yenileme sayısını izler. Yenileme sayısı tarafından eureka.server.renewal-percent-thresholdtanımlanan eşik yüzdesinin altına düştüğünde. Varsayılan değer, özgün Eureka sunucusunda true olarak ayarlanır, ancak Eureka Server Java bileşeninde varsayılan değer false olarak ayarlanır. Bkz. Spring Java bileşeni için Eureka Sunucusu Sınırlamaları. false
eureka.server.renewal-percent-threshold tarafından eureka.server.renewal-threshold-update-interval-msbelirtilen dönemde istemcilerden beklenen en düşük yenileme yüzdesi. Yenilemeler eşiğin altına düşerse ve eureka.server.enable-self-preservation etkinleştirilmişse, süre sonu devre dışı bırakılır. 0.85
eureka.server.renewal-threshold-update-interval-ms Eşiğin (içinde eureka.server.renewal-percent-threshold belirtildiği gibi) güncelleştirilmesi gereken aralık. 0
eureka.server.expected-client-renewal-interval-seconds İstemcilerin kalp atışlarını göndermesi beklenen aralık. Varsayılan değer 30 saniyedir. İstemciler, örneğin her 15 saniyede bir, farklı frekanslarla sinyal gönderiyorsa, bu parametre uygun şekilde ayarlanmalıdır, aksi takdirde koruma mekanizması beklendiği gibi çalışmaz. 30
eureka.server.response-cache-auto-expiration-in-seconds Değişiklik olayları bunu geçersiz kılmazsa kayıt defteri yükünün önbellekte tutulması gereken zamanı alır. 180
eureka.server.response-cache-update-interval-ms İstemcinin yük önbelleğinin güncelleştirilmesi gereken zaman aralığını alır. 0
eureka.server.use-read-only-response-cache Şu com.netflix.eureka.registry.ResponseCache anda yanıtlar için iki düzeyli bir önbelleğe alma stratejisi kullanılır. Süre readWrite sonu ilkesine sahip bir önbellek ve süresi dolmadan önbelleğe alınan bir readonly önbellek. true
eureka.server.disable-delta Delta bilgilerinin istemciye sunulup sunulmadığını denetler. false
eureka.server.retention-time-in-m-s-in-delta-queue İstemcilerin değeri kaçırmadan alması için delta bilgilerinin önbelleğe alınması gereken zamanı alın. 0
eureka.server.delta-retention-timer-interval-in-ms Temizleme görevinin uyanıp süresi dolmuş delta bilgilerini denetlemesi gereken zaman aralığını alın. 0
eureka.server.eviction-interval-timer-in-ms Görev sona erdiğinde, örneklerin uyanıp çalışacağı zaman aralığını alın. 60000
eureka.server.sync-when-timestamp-differs Zaman damgası farklılık gösterdiğinde örneklerin eşitlenip eşitlenmeyeceğini denetler. true
eureka.server.rate-limiter-enabled Hız sınırlayıcının etkin mi yoksa devre dışı mı olması gerektiğini gösterir. false
eureka.server.rate-limiter-burst-size Hız sınırlayıcı, belirteç kovası algoritması özelliği. 10
eureka.server.rate-limiter-registry-fetch-average-rate Hız sınırlayıcı, belirteç kovası algoritması özelliği. Zorlanan ortalama istek oranını belirtir. 500
eureka.server.rate-limiter-privileged-clients Standart eureka Java müşterilerine ek olarak sertifikalı istemcilerin listesi. N/A
eureka.server.rate-limiter-throttle-standard-clients Standart istemciler için hız sınırı uygulanıp uygulanmadığını belirtin. Eğer false olarak ayarlandığında, yalnızca standart olmayan istemcilerin hızları sınırlandırılır. false
eureka.server.rate-limiter-full-fetch-average-rate Hız sınırlayıcı, belirteç kovası algoritması özelliği. Zorlanan ortalama istek oranını belirtir. 100

Ortak yapılandırmalar

  • İlgili yapılandırmaları günlüğe kaydetme:
    • logging.level.*
    • logging.group.*
    • Ad alanı altındaki logging.* diğer tüm yapılandırmalar yasak olmalıdır; örneğin, kullanarak logging.file günlük dosyaları yazmak yasak olmalıdır.

Uygulamalar arasında arama

Bu örnekte, Spring için Eureka Server bileşenine kayıtlı uygulamalar arasında çağrı yapmak üzere Java kodu nasıl yazabileceğiniz gösterilmektedir. Kapsayıcı uygulamaları Eureka ile ilişkili olduğunda, Eureka sunucusu aracılığıyla birbirleriyle iletişim kurarlar.

Örnek, bir çağıran ve bir çağırılan olmak üzere iki uygulama oluşturur. Her iki uygulama da Spring için Eureka Server bileşenini kullanarak birbirleriyle iletişim kurar. Çağıran uygulaması, çağıran uygulama tarafından çağrılan bir uç noktayı kullanıma sunar.

  1. Çağıran uygulamasını oluşturun. Ana sınıfınıza @EnableDiscoveryClient anotasyonu ekleyerek Spring Boot uygulamanızda Eureka istemcisini etkinleştirin.

    @SpringBootApplication
    @EnableDiscoveryClient
    public class CalleeApplication {
      public static void main(String[] args) {
        SpringApplication.run(CalleeApplication.class, args);
      }
    }
    
  2. Çağrı yapılan uygulamada, çağıran uygulama tarafından çağrılacak bir uç nokta oluşturun.

    @RestController
    public class CalleeController {
    
        @GetMapping("/call")
        public String calledByCaller() {
            return "Hello from Application callee!";
        }
    }
    
  3. Çağrılan uygulamanın adını uygulama yapılandırma dosyasında (örneğin, application.yml) ayarlayın.

    spring.application.name=callee
    
  4. Çağıran uygulamasını oluşturun.

    @EnableDiscoveryClient Eureka istemci işlevselliğini etkinleştirmek için ek açıklamayı ekleyin. Ayrıca, diğer hizmetlere yük dengeli çağrılar gerçekleştirmek için WebClient.Builder anotasyonuyla @LoadBalanced bir bean oluşturun.

    @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. Çağıran uygulamada, WebClient.Builder öğesini kullanarak, uygulama adı olarak "çağrılan" kullanılan çağrılan uygulamayı çağıran bir denetleyici oluşturun.

    @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);
        }
    }
    

Artık Spring Java bileşenleri için Eureka Server kullanarak birbirleriyle iletişim kuran bir arayıcı ve aranan uygulamanız var. Çağıran uygulamasında uç noktayı test etmeden önce her iki uygulamanın da çalıştığından /call-callee emin olun ve Eureka sunucusuna bağlanın.

Sınırlamalar

  • Eureka Server Java bileşeni, eureka.server.enable-self-preservation olarak ayarlanmış false varsayılan yapılandırmayla birlikte gelir. Bu varsayılan yapılandırma, kendini koruma etkinleştirildikten sonra örneklerin silinmediği zamanları önlemeye yardımcı olur. Örnekler çok erken silinirse, bazı istekler var olmayan örneklere yönlendirilebilir. Bu ayarı true olarak değiştirmek istiyorsanız, Java bileşeninde kendi yapılandırmalarınızı ayarlayarak bu ayarın üzerine yazabilirsiniz.
  • Eureka panosu, 21Vianet tarafından işletilen Azure'da mevcut değil.

Sonraki adımlar

Azure Container Apps

Spring için yönetilen Yöneticiyi Spring için Eureka Server ile tümleştirme