Share via


Tanzu Service Registry kullanma

Not

Azure Spring Apps, Azure Spring Cloud hizmetinin yeni adıdır. Hizmetin yeni bir adı olsa da, ekran görüntüleri, videolar ve diyagramlar gibi varlıkları güncelleştirmek için çalışırken bazı yerlerde eski adı bir süre görürsünüz.

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:

Hizmet A ve Hizmet B oluşturma, dağıtma ve kaydetme adımlarını gösteren diyagram.

Bu adımlar aşağıdaki bölümlerde daha ayrıntılı olarak açıklanmıştır.

  1. Hizmet A oluşturma.
  2. A Hizmetini Azure Spring Apps'e dağıtın ve Service Registry'ye kaydedin.
  3. Hizmet B'yi oluşturun ve A Hizmetini çağırmak için uygulayın.
  4. Hizmet B'yi dağıtın ve Service Registry'ye kaydedin.
  5. 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.

Gerekli ayarları gösteren Spring Initializr sayfasının ekran görüntüsü.

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ğlan

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:

Uygulama bağlama açılan listesinin vurgulandığı Hizmet Kayıt Defteri sayfasını gösteren Azure portalının ekran görüntüsü.

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:

Bağlama açılan listesinin vurgulandığı Uygulama Oluştur sayfasını gösteren Azure portalının ekran görüntüsü.

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:

  1. Hizmet kaynağınıza gidin ve Ardından Hizmet Kayıt Defteri'ni seçin.
  2. Yönet'i seçin.
  3. Hizmet Kayıt Defterini Etkinleştir'i seçin veya seçimini kaldırın ve ardından Kaydet'i seçin.
  4. Artık Hizmet Kayıt Defteri sayfasında Service Registry'nin durumunu görüntüleyebilirsiniz.

Sonraki adımlar