Azure Container Apps'te spring için yönetilen eureka sunucusuna 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 için bir Eureka Sunucusu bileşeni oluşturun.
- Kapsayıcı uygulamanızı Spring Java için Eureka Sunucusu 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
- Etkin aboneliği olan bir Azure hesabı. Henüz bir hesabınız yoksa ücretsiz olarak oluşturabilirsiniz.
- Azure CLI.
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:
Kalem | 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 olarak 1 ayarlanır. Yüksek kullanılabilirlik elde etmek için bkz . Container Apps'te yüksek oranda kullanılabilir bir Eureka Hizmeti oluşturma. |
Kaynaklar | Spring için Eureka Server için kapsayıcı kaynak ayırma işlemi düzeltildi. CPU çekirdeklerinin sayısı 0,5 ve bellek boyutu 1 Gi'dir. |
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ğlama yoluyla Spring için Eureka Server 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.
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ölgesi konumu. ENVIRONMENT
Tanıtım uygulamanızın kapsayıcı uygulaması 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 için bir Eureka Server bileşeni oluşturursunuz. IMAGE
Kapsayıcı uygulamanızda kullanılan kapsayıcı görüntüsü. Azure CLI ile Azure'da oturum açın.
az login
Kaynak grubu oluşturun.
az group create --name $RESOURCE_GROUP --location $LOCATION
Kapsayıcı uygulama ortamınızı oluşturun.
az containerapp env create \ --name $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --location $LOCATION
Spring Java için Eureka Server bileşenini 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.
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
İsteğe bağlı: Spring Java bileşen yapılandırması için Eureka Server'ı 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 Java için Eureka Server bileşenine bağlama
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
Uygulamanızın URL'sini bir metin düzenleyicisine kopyalayarak gelecek bir adımda kullanabilirsiniz.
Portalda kapsayıcı uygulamasına dönün. Uygulamanızın URL'sini bir metin düzenleyicisine kopyalayarak gelecek bir adımda kullanabilirsiniz.
/allRegistrationStatus
Spring için Eureka Server bileşenine kayıtlı tüm uygulamaları görüntülemek için yola gidin.
Bağlama, uygulamaya öncelikle özelliği olmak üzere ortam değişkenleri olarak çeşitli yapılandırmalar eureka.client.service-url.defaultZone
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"
özelliği, eureka.client.register-with-eureka
Eureka sunucusuna kaydı zorunlu kılmak için olarak ayarlanır true
. Bu kayıt, içindeki yerel ayarın application.properties
üzerine yapılandırma sunucusundan yazar ve bu şekilde devam eder. olarak ayarlamak false
isterseniz, 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ı sistem çözümleme kuralı nedeniyle olarak ayarlanırtrue
. Bağlamayı bozmak için bu değeri değiştirmeyin.
İsteğe bağlı: Spring Java için Eureka Server bileşeninden 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 en azından yönetilen ortam kaynağında Microsoft.App/managedEnvironments/write
hesabınıza atanmış rolün 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
Pano Azure China 21Vianet'te kullanılamaz.
Ö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>"] }'
Değerdeki
AssignableScopes
yer tutucuyu<SUBSCRIPTION_ID>
abonelik kimliğiniz ile değiştirdiğinden emin olun.Ö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)
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ğer 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.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. Panoyla, aşağıdaki ekran görüntüsünde gösterildiği gibi kapsayıcı uygulamanızı da görebilirsiniz.
İ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öneticiyi 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
Lütfen yeni özellik istekleri için destek biletleri gönderin.
Yapılandırma seçenekleri
komutu, az containerapp update
Spring için Eureka Sunucusunun nasıl yapılandırıldığını denetlemek için parametresini kullanır --configuration
. 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ı | Veri Akışı Açıklaması | Default value |
---|---|---|
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-threshold tanımlanan eşik yüzdesinin altına düştüğünde. Varsayılan değer özgün Eureka sunucusunda olarak true ayarlanır, ancak Eureka Server Java bileşeninde varsayılan değer olarak false ayarlanır. Bkz . Spring Java bileşeni için Eureka Server sınırlamaları. |
false |
eureka.server.renewal-percent-threshold |
tarafından eureka.server.renewal-threshold-update-interval-ms belirtilen dönemde istemcilerden beklenen en düşük yenileme yüzdesi. Yenilemeler eşiğin altına düşerse, etkinse eureka.server.enable-self-preservation 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 sinyallerini göndermesi beklenen aralık. Varsayılan değer 30 saniyedir. İstemciler her 15 saniyede bir farklı sıklıkta sinyal gönderirse, bu parametre buna göre ayarlanmalıdır, aksi takdirde kendini koruma beklendiği gibi çalışmaz. | 30 |
eureka.server.response-cache-auto-expiration-in-seconds |
Değişiklik olayları tarafından geçersiz kılınmamışsa, 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 uyandığı zaman aralığını alın ve süresi dolan delta bilgilerini denetleyin. | 0 |
eureka.server.eviction-interval-timer-in-ms |
Süresi dolan görevin örneklerinin uyanıp çalışması gereken 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ç demet algoritması özelliği. | 10 |
eureka.server.rate-limiter-registry-fetch-average-rate |
Hız sınırlayıcı, belirteç demet algoritması özelliği. Zorlanan ortalama istek oranını belirtir. | 500 |
eureka.server.rate-limiter-privileged-clients |
Sertifikalı istemcilerin listesi. Bu, standart eureka Java istemcilerine ek olarak sağlanır. | N/A |
eureka.server.rate-limiter-throttle-standard-clients |
Hız sınırının standart istemciler olup olmadığını belirtin. olarak ayarlanırsa false yalnızca standart olmayan istemciler hız sınırına sahiptir. |
false |
eureka.server.rate-limiter-full-fetch-average-rate |
Hız sınırlayıcı, belirteç demet 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, kullanaraklogging.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 için Java kodu yazma işlemi gösterilmektedir. Kapsayıcı uygulamaları Eureka ile ilişkili olduğunda, Eureka sunucusu aracılığıyla birbirleriyle iletişim kurarlar.
Örnek, çağıran ve çağıran 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.
Çağıran uygulamasını oluşturun. Ana sınıfınıza ek açıklama ekleyerek Spring Boot uygulamanızda Eureka istemcisini
@EnableDiscoveryClient
etkinleştirin.@SpringBootApplication @EnableDiscoveryClient public class CalleeApplication { public static void main(String[] args) { SpringApplication.run(CalleeApplication.class, args); } }
Çağıran uygulamasında çağıran uygulaması tarafından çağrılan bir uç nokta oluşturun.
@RestController public class CalleeController { @GetMapping("/call") public String calledByCaller() { return "Hello from Application callee!"; } }
Çağrılan uygulamanın adını uygulama yapılandırma dosyasında (örneğin, application.yml) ayarlayın.
spring.application.name=callee
Ç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 ek açıklamayla@LoadBalanced
birWebClient.Builder
fasulye 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(); } }
Çağıran uygulamasında çağıran uygulamasını çağıran adlı uygulama adını kullanarak çağırmak için öğesini kullanan
WebClient.Builder
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 çağıran ve çağıran 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 bir 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ı olaraktrue
değiştirmek istiyorsanız, Java bileşeninde kendi yapılandırmalarınızı ayarlayarak bu ayarın üzerine yazabilirsiniz. - Eureka panosu Azure China 21Vianet'te kullanılamaz.
Sonraki adımlar
İlgili içerik
Spring için yönetilen Yöneticiyi Spring için Eureka Server ile tümleştirme