Tanzu Service Registry kullanma
Not
Temel, Standart ve Kurumsal planları, 3 yıllık kullanımdan kaldırma süresiyle Mart 2025 ortasından itibaren kullanımdan kaldırılacaktır. Azure Container Apps'e geçiş yapmanızı öneririz. Daha fazla bilgi için bkz . Azure Spring Apps kullanımdan kaldırma duyurusu.
Standart tüketim ve ayrılmış plan, altı ay sonra tamamen kapatılarak 30 Eylül 2024'den itibaren kullanımdan kaldırılacaktır. Azure Container Apps'e geçiş yapmanızı öneririz. Daha fazla bilgi için bkz . Azure Spring Apps Standart tüketimini ve ayrılmış planı Azure Container Apps'e geçirme.
Bu makale şunlar için geçerlidir: ❎ Temel/Standart ✅ Kurumsal
Bu makalede, Azure Spring Apps Enterprise planıyla VMware Tanzu Service Registry'nin nasıl kullanılacağı gösterilmektedir.
Tanzu Service Registry, ticari VMware Tanzu bileşenlerinden biridir. Bu bileşen, uygulamalarınıza hizmet bulma tasarım desenini uygulamanıza yardımcı olur.
Hizmet bulma, mikro hizmetler mimarisinin ana fikirlerinden biridir. Hizmet bulma olmadan, bir hizmetin her istemcisini el ile yapılandırmanız veya bir tür erişim kuralı benimsemeniz gerekir. Bu işlem zor olabilir ve yapılandırmalar ve kurallar üretimde kırılgan olabilir. Bunun yerine, uygulamanızdaki kayıtlı hizmetleri dinamik olarak bulmak ve çağırmak için Tanzu Hizmet Kayıt Defteri'ni kullanabilirsiniz.
Azure Spring Apps Enterprise planıyla Service Registry'yi kendiniz oluşturmanız veya başlatmanız gerekmez. Tanzu Service Registry'yi Azure Spring Apps Enterprise plan örneğinizi oluştururken seçerek kullanabilirsiniz.
Önkoşullar
- Tanzu Service Registry'nin etkinleştirildiği, önceden sağlanmış bir Azure Spring Apps Kurumsal plan örneği. Daha fazla bilgi için bkz . Hızlı Başlangıç: Kurumsal planı kullanarak uygulamaları derleme ve Azure Spring Apps'e dağıtma.
- Azure Spring Apps Kurumsal plan uzantısı. Önceki sürümleri kaldırmak ve en son Kurumsal plan uzantısını yüklemek için aşağıdaki komutu kullanın. Uzantıyı
spring-cloud
daha önce yüklediyseniz yapılandırma ve sürüm uyuşmazlıklarını önlemek için uzantıyı kaldırın.az extension add --upgrade --name spring az extension remove --name spring-cloud
Service Registry kullanan uygulamalar oluşturma
Bu makalede iki hizmet oluşturacak ve bunları Azure Spring Apps Service Registry'ye kaydedacaksınız. Kayıt sonrasında, bir hizmet diğer hizmeti bulmak ve çağırmak için Service Registry'yi kullanabilir. Aşağıdaki diyagramda gerekli adımlar özetlemektedir:
Bu adımlar aşağıdaki bölümlerde daha ayrıntılı olarak açıklanmıştır.
- Hizmet A oluşturma.
- A Hizmetini Azure Spring Apps'e dağıtın ve Service Registry'ye kaydedin.
- Hizmet B'yi oluşturun ve A Hizmetini çağırmak için uygulayın.
- Hizmet B'yi dağıtın ve Service Registry'ye kaydedin.
- Hizmet B aracılığıyla A Hizmetini çağır.
Ortam değişkenlerini oluşturma
Bu makalede aşağıdaki ortam değişkenleri kullanılır. Bu değişkenleri Azure Spring Apps Kurumsal plan örneğinizi oluştururken kullandığınız değerlere ayarlayın.
Değişken | Açıklama |
---|---|
$RESOURCE_GROUP | Kaynak grubu adı. |
$AZURE_SPRING_APPS_NAME | Azure Spring Apps örnek adı. |
Spring Boot ile Hizmet A Oluşturma
Örnek Hizmet A oluşturmak için Spring Initializr'a gidin. Bu bağlantı, ayarları başlatmak için aşağıdaki URL'yi kullanır.
https://start.spring.io/#!type=maven-project&language=java&packaging=jar&groupId=com.example&artifactId=Sample%20Service%20A&name=Sample%20Service%20A&description=Demo%20project%20for%20Spring%20Boot&packageName=com.example.Sample%20Service%20A&dependencies=web,cloud-eureka
Aşağıdaki ekran görüntüsünde spring initializr ve gerekli ayarlar gösterilmektedir.
Ardından, aşağıdaki dizin yapısına sahip Spring Boot için örnek bir proje almak için OLUŞTUR'a tıklayın.
├── HELP.md
├── mvnw
├── mvnw.cmd
├── pom.xml
└── src
├── main
│ ├── java
│ │ └── com
│ │ └── example
│ │ └── Sample
│ │ └── Service
│ │ └── A
│ │ └── SampleServiceAApplication.java
│ └── resources
│ ├── application.properties
│ ├── static
│ └── templates
└── test
└── java
└── com
└── example
└── Sample
└── Service
└── A
└── SampleServiceAApplicationTests.java
Service Registry istemcisi (Eureka istemcisi) için bağımlı kitaplıkların yapılandırmasını onaylayın
Ardından, proje için pom.xml dosyasının aşağıdaki bağımlılığı içerdiğini onaylayın. Eksikse bağımlılığı ekleyin.
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
Service Registry istemcisini uygulama
eureka istemcisi olarak yapılandırmak için SampleServiceAApplication.java dosyasına bir @EnableEurekaClient
ek açıklama ekleyin.
package com.example.Sample.Service.A;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
@EnableEurekaClient
public class SampleServiceAApplication {
public static void main(String[] args) {
SpringApplication.run(SampleServiceAApplication.class, args);
}
}
Test için REST uç noktası oluşturma
Artık hizmeti Service Registry'ye kaydedebilirsiniz, ancak bir hizmet uç noktası uygulamadan doğrulayamazsınız. Dış hizmetlerin çağırabileceği RESTful uç noktaları oluşturmak için projenize aşağıdaki kodla bir ServiceAEndpoint.java dosyası ekleyin.
package com.example.Sample.Service.A;
import java.util.Map;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ServiceAEndpoint {
@GetMapping("/serviceA")
public String getServiceA(){
return "This is a result of Service A";
}
@GetMapping("/env")
public Map<String, String> getEnv(){
Map<String, String> env = System.getenv();
return env;
}
}
Spring Boot uygulaması oluşturma
Artık basit bir hizmetiniz olduğuna göre aşağıdaki komutu çalıştırarak kaynak kodu derleyin ve derleyin:
mvn clean package
Hizmet A'yi dağıtma ve Service Registry'ye kaydolma
Bu bölümde, Azure Spring Apps Kurumsal plan örneğine Hizmet A'nın nasıl dağıtılacağı ve Service Registry'ye nasıl kaydedilecekleri açıklanmaktadır.
Azure Spring Apps uygulaması oluşturma
İlk olarak, aşağıdaki komutu kullanarak Azure Spring Apps'te bir uygulama oluşturun:
az spring app create \
--resource-group $RESOURCE_GROUP \
--service $AZURE_SPRING_APPS_NAME \
--name serviceA \
--instance-count 1 \
--memory 2Gi \
--assign-endpoint
--assign-endpoint
bağımsız değişkeni doğrulama için bir genel IP verir ve dış ağdan erişim sağlar.
Uygulamadan Service Registry'ye bağlanma
Spring Boot ile bir hizmet örneği oluşturduktan ve Azure Spring Apps'te bir uygulama oluşturduktan sonra uygulamayı dağıtıp işlemi onaylarsınız. Ancak bundan önce uygulamanızı kayıt defterinden bağlantı bilgilerini alabilmesi için Service Registry'ye bağlamanız gerekir.
Genellikle, bir Eureka istemcisinin sunucuya bağlanabilmeniz için spring boot uygulamasının application.properties yapılandırma dosyasına aşağıdaki bağlantı bilgileri ayarlarını yazması gerekir:
eureka.client.service-url.defaultZone=http://eureka:8761/eureka/
Ancak, bu ayarları doğrudan uygulamanıza yazarsanız, Service Registry sunucusu her değiştiğinde projeyi yeniden düzenlemeniz ve yeniden oluşturmanız gerekir. Bu çabayı önlemek için Azure Spring Apps, uygulamalarınızın hizmet kayıt defterinden bağlantı bilgilerini bağlama yoluyla almasına olanak tanır. Özellikle, uygulamayı Service Registry'ye bağladıktan sonra Hizmet kayıt defteri bağlantı bilgilerini (eureka.client.service-url.defaultZone
) Java ortam değişkeninden alabilirsiniz. Bu şekilde, uygulama başlatıldığında ortam değişkenlerinin içeriğini yükleyerek Service Registry'ye bağlanabilirsiniz.
Uygulamada aşağıdaki ortam değişkenleri değişkenine JAVA_TOOL_OPTIONS
eklenir:
-Deureka.client.service-url.defaultZone=https://$AZURE_SPRING_APPS_NAME.svc.azuremicroservices.io/eureka/default/eureka
Service Registry'ye hizmet bağlama
Hizmeti Azure Service Registry'ye bağlamak ve sunucuya bağlanmasına olanak sağlamak için aşağıdaki komutu kullanın.
az spring service-registry bind \
--resource-group $RESOURCE_GROUP \
--service $AZURE_SPRING_APPS_NAME \
--app serviceA
Aşağıdaki ekran görüntüsünde gösterildiği gibi Azure portalından uygulama bağlamalarını da ayarlayabilirsiniz:
Not
Hizmet kayıt defteri durumu değiştiğinde bu değişikliklerin tüm uygulamalara yayılması birkaç dakika sürer.
Bağlama/bağlamayı kaldırma durumunu değiştirirseniz uygulamayı yeniden başlatmanız veya yeniden dağıtmanız gerekir.
Artık aşağıdaki komutları kullanarak yeni bir uygulama oluştururken uygulamanızı doğrudan Service Registry'ye bağlamayı seçebilirsiniz:
az spring app create \
--resource-group <resource-group> \
--service <service-name> \
--name <app-name> \
--bind-service-registry
Aşağıdaki ekran görüntüsünde gösterildiği gibi uygulamanızı Azure portalından Service Registry'ye de bağlayabilirsiniz:
Azure Spring Apps'e uygulama dağıtma
Artık uygulamanızı bağladığınıza göre Spring Boot yapıt dosyasını Sample-Service-A-A-0.0.1-SNAPSHOT.jar Azure Spring Apps'e dağıtın. Dağıtmak için aşağıdaki komutu kullanın:
az spring app deploy \
--resource-group $RESOURCE_GROUP \
--service $AZURE_SPRING_APPS_NAME \
--name serviceA \
--artifact-path ./target/Sample-Service-A-0.0.1-SNAPSHOT.jar \
--jvm-options="-Xms1024m -Xmx1024m"
Dağıtımınızın başarılı olup olmadığını görmek için aşağıdaki komutu kullanın.
az spring app list \
--resource-group $RESOURCE_GROUP \
--service $AZURE_SPRING_APPS_NAME \
--output table
Bu komut aşağıdaki örneğe benzer bir çıkış oluşturur.
Name Location ResourceGroup Public Url Production Deployment Provisioning State CPU Memory Running Instance Registered Instance Persistent Storage Bind Service Registry Bind Application Configuration Service
------------------------ ------------- ---------------------- ------------------------------------------------------------------- ----------------------- -------------------- ----- -------- ------------------ --------------------- -------------------- ----------------------- ----------------------------------------
servicea southeastasia $RESOURCE_GROUP https://$AZURE_SPRING_APPS_NAME-servicea.azuremicroservices.io default Succeeded 1 2Gi 1/1 N/A - default -
Hizmet A uygulamasının çalıştığını onaylayın
Önceki komutun çıktısı hizmetin genel URL'sini içerir. RESTful uç noktasına erişmek için, aşağıdaki komutta gösterildiği gibi URL'ye ekleyin /serviceA
:
curl https://$AZURE_SPRING_APPS_NAME-servicea.azuremicroservices.io/serviceA
Bu komut aşağıdaki çıkışı oluşturur.
This is a result of Service A
Hizmet A, ortam değişkenlerinin listesini görüntüleyen bir RESTful uç noktası içerir. Aşağıdaki komutta gösterildiği gibi ortam değişkenlerini görmek için ile uç noktaya /env
erişin:
curl https://$AZURE_SPRING_APPS_NAME-servicea.azuremicroservices.io/env
Bu komut aşağıdaki çıkışı oluşturur.
"JAVA_TOOL_OPTIONS":"-Deureka.client.service-url.defaultZone=https://$AZURE_SPRING_APPS_NAME.svc.azuremicroservices.io/eureka/default/eureka
Gördüğünüz gibi öğesine eureka.client.service-url.defaultZone
eklenir JAVA_TOOL_OPTIONS
. Bu şekilde uygulama hizmeti Service Registry'ye kaydedebilir ve diğer hizmetlerden kullanılabilir hale getirir.
Artık hizmeti Azure Spring Apps'teki Service Registry'ye (Eureka Server) kaydedebilirsiniz. Diğer hizmetler artık hizmet kayıt defterini kullanarak hizmete erişebilir.
Hizmet Kayıt Defteri aracılığıyla Hizmet A'ya erişen yeni bir Hizmet B uygulama
Spring Boot ile B Hizmetini Uygulama
B Hizmeti için yeni bir proje oluşturmak için Spring Initializr'a gidin. Bu bağlantı, ayarları başlatmak için aşağıdaki URL'yi kullanır:
https://start.spring.io/#!type=maven-project&language=java&packaging=jar&groupId=com.example&artifactId=Sample%20Service%20B&name=Sample%20Service%20B&description=Demo%20project%20for%20Spring%20Boot&packageName=com.example.Sample%20Service%20B&dependencies=web,cloud-eureka
Ardından, yeni projeyi almak için OLUŞTUR'a tıklayın.
Hizmet B'ye Hizmet Kayıt Defteri istemcisi (Eureka istemcisi) uygulama
Hizmet A gibi ek açıklamayı @EnableEurekaClient
da Hizmet B'ye ekleyerek Eureka istemcisi olarak yapılandırın.
package com.example.Sample.Service.B;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
@EnableEurekaClient
public class SampleServiceBApplication {
public static void main(String[] args) {
SpringApplication.run(SampleServiceBApplication.class, args);
}
}
Hizmet B'de hizmet uç noktalarını uygulama
Ardından, Hizmet A'yı çağıran yeni bir hizmet uç noktası (/invoke-serviceA
) uygulayın. Projenize aşağıdaki kodla bir ServiceBEndpoint.java dosyası ekleyin.
package com.example.Sample.Service.B;
import java.util.List;
import java.util.stream.Collectors;
import com.netflix.discovery.EurekaClient;
import com.netflix.discovery.shared.Application;
import com.netflix.discovery.shared.Applications;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@RestController
public class ServiceBEndpoint {
@Autowired
private EurekaClient discoveryClient;
@GetMapping(value = "/invoke-serviceA")
public String invokeServiceA()
{
RestTemplate restTemplate = new RestTemplate();
String response = restTemplate.getForObject("http://servicea/serviceA",String.class);
return "INVOKE SERVICE A FROM SERVICE B: " + response;
}
@GetMapping(value = "/list-all")
public List<String> listsAllServices() {
Applications applications = discoveryClient.getApplications();
List<Application> registeredApplications = applications.getRegisteredApplications();
List<String> appNames = registeredApplications.stream().map(app -> app.getName()).collect(Collectors.toList());
return appNames;
}
}
Bu örnekte kolaylık sağlamak için kullanılır RestTemplate
. Uç nokta, B Hizmeti tarafından çağrıldığını belirtmek için yanıt dizesini başka bir dizeyle (INVOKE SERVICE A FROM SERVICE B: "
) döndürür.
Bu örnek ayrıca doğrulama için başka bir uç nokta (/list-all
) uygular. Bu uygulama, hizmetin Service Registry ile doğru iletişim kurmasını sağlar. Service Registry'de kayıtlı uygulamaların listesini almak için bu uç noktayı çağırabilirsiniz.
Bu örnekte Hizmet A olarak çağrılır http://servicea
. Hizmet adı, Azure Spring Apps uygulaması oluşturulurken belirttiğiniz addır. (Örneğin: az spring app create --name ServiceA
.) Uygulama adı, hizmet kayıt defterine kaydettiğiniz hizmet adıyla eşleşerek hizmet adını yönetmeyi kolaylaştırır.
Derleme Hizmeti B
Projenizi oluşturmak için aşağıdaki komutu kullanın.
mvn clean package
Hizmet B'yi Azure Spring Apps'e dağıtma
Azure Spring Apps'te B Hizmetini dağıtmak üzere bir uygulama oluşturmak için aşağıdaki komutu kullanın.
az spring app create \
--resource-group $RESOURCE_GROUP \
--service $AZURE_SPRING_APPS_NAME \
--name serviceB \
--instance-count 1 \
--memory 2Gi \
--assign-endpoint
Ardından, uygulamayı Service Registry'ye bağlamak için aşağıdaki komutu kullanın.
az spring service-registry bind \
--resource-group $RESOURCE_GROUP \
--service $AZURE_SPRING_APPS_NAME \
--app serviceB
Ardından, hizmeti dağıtmak için aşağıdaki komutu kullanın.
az spring app deploy \
--resource-group $RESOURCE_GROUP \
--service $AZURE_SPRING_APPS_NAME \
--name serviceB \
--artifact-path ./target/Sample-Service-B-0.0.1-SNAPSHOT.jar \
--jvm-options="-Xms1024m -Xmx1024m"
Ardından, uygulamanın durumunu denetlemek için aşağıdaki komutu kullanın.
az spring app list \
--resource-group $RESOURCE_GROUP \
--service $AZURE_SPRING_APPS_NAME \
--output table
Hizmet A ve Hizmet B doğru dağıtılırsa, bu komut aşağıdaki örneğe benzer bir çıktı oluşturur.
Name Location ResourceGroup Public Url Production Deployment Provisioning State CPU Memory Running Instance Registered Instance Persistent Storage Bind Service Registry Bind Application Configuration Service
-------- ------------- ---------------------- --------------------------------------------------------------- ----------------------- -------------------- ----- -------- ------------------ --------------------- -------------------- ----------------------- ----------------------------------------
servicea southeastasia SpringCloud-Enterprise https://$AZURE_SPRING_APPS_NAME-servicea.azuremicroservices.io default Succeeded 1 2Gi 1/1 1/1 - default -
serviceb southeastasia SpringCloud-Enterprise https://$AZURE_SPRING_APPS_NAME-serviceb.azuremicroservices.io default Succeeded 1 2Gi 1/1 1/1 - default -
B Hizmetinden A Hizmetini Çağırma
Önceki komutun çıktısı hizmetin genel URL'sini içerir. RESTful uç noktasına erişmek için, aşağıdaki komutta gösterildiği gibi URL'ye ekleyin /invoke-serviceA
:
curl https://$AZURE_SPRING_APPS_NAME-serviceb.azuremicroservices.io/invoke-serviceA
Bu komut aşağıdaki çıkışı oluşturur:
INVOKE SERVICE A FROM SERVICE B: This is a result of Service A
Service Registry'den bazı bilgiler alın
Son olarak uç noktaya erişin /list-all
ve Service Registry'den bazı bilgileri alın. Aşağıdaki komut, Service Registry'de kayıtlı hizmetlerin listesini alır.
curl https://$AZURE_SPRING_APPS_NAME-serviceb.azuremicroservices.io/list-all
Bu komut aşağıdaki çıkışı oluşturur.
["SERVICEA","EUREKA-SERVER","SERVICEB"]
Bu şekilde, programdan gerektiği şekilde ayrıntılı bilgi edinebilirsiniz.
Hizmet oluşturulduktan sonra Service Registry'yi etkinleştirme/devre dışı bırakma
Hizmet oluşturulduktan sonra Azure portalını veya Azure CLI'yı kullanarak Service Registry'yi etkinleştirebilir ve devre dışı bırakabilirsiniz. Service Registry'yi devre dışı bırakmadan önce tüm uygulamalarınızın bağlantısını kaldırmanız gerekir.
Azure portalını kullanarak Service Registry'yi etkinleştirmek veya devre dışı bırakmak için aşağıdaki adımları kullanın:
- Hizmet kaynağınıza gidin ve Ardından Hizmet Kayıt Defteri'ni seçin.
- Yönet'i seçin.
- Hizmet Kayıt Defterini Etkinleştir'i seçin veya seçimini kaldırın ve ardından Kaydet'i seçin.
- Artık Hizmet Kayıt Defteri sayfasında Service Registry'nin durumunu görüntüleyebilirsiniz.