Korzystanie z rejestru usługi Tanzu
Uwaga
Plany Podstawowa, Standardowa i Enterprise zostaną wycofane od połowy marca 2025 r. z 3-letnim okresem emerytalnym. Zalecamy przejście do usługi Azure Container Apps. Aby uzyskać więcej informacji, zobacz ogłoszenie o wycofaniu usługi Azure Spring Apps.
Zużycie standardowe i dedykowany plan zostaną wycofane od 30 września 2024 r. z całkowitym zamknięciem po sześciu miesiącach. Zalecamy przejście do usługi Azure Container Apps. Aby uzyskać więcej informacji, zobacz Migrowanie użycia usługi Azure Spring Apps w warstwie Standardowa i dedykowanego planu do usługi Azure Container Apps.
Ten artykuł dotyczy:❌ Podstawowa/Standardowa ✔️ Enterprise
W tym artykule pokazano, jak używać rejestru usługi VMware Tanzu z planem Azure Spring Apps Enterprise.
Rejestr usługi Tanzu jest jednym z komercyjnych składników VMware Tanzu. Ten składnik pomaga zastosować wzorzec projektowania odnajdywania usług do aplikacji.
Odnajdywanie usług to jeden z głównych pomysłów architektury mikrousług. Bez odnajdywania usług należy ręcznie skonfigurować każdego klienta usługi lub przyjąć jakąś formę konwencji dostępu. Ten proces może być trudny, a konfiguracje i konwencje mogą być kruche w środowisku produkcyjnym. Zamiast tego możesz użyć rejestru usługi Tanzu do dynamicznego odnajdywania i wywoływania zarejestrowanych usług w aplikacji.
w ramach planu Usługi Azure Spring Apps Enterprise nie musisz samodzielnie tworzyć ani uruchamiać rejestru usług. Rejestr usługi Tanzu można użyć, wybierając go podczas tworzenia wystąpienia planu Usługi Azure Spring Apps Enterprise.
Wymagania wstępne
- Już aprowizowane wystąpienie planu Usługi Azure Spring Apps Enterprise z włączoną usługą Tanzu Service Registry. Aby uzyskać więcej informacji, zobacz Szybki start: tworzenie i wdrażanie aplikacji w usłudze Azure Spring Apps przy użyciu planu Enterprise.
- Rozszerzenie planu Usługi Azure Spring Apps Enterprise. Użyj następującego polecenia, aby usunąć poprzednie wersje i zainstalować najnowsze rozszerzenie planu Enterprise. Jeśli wcześniej zainstalowano
spring-cloud
rozszerzenie, odinstaluj je, aby uniknąć niezgodności konfiguracji i wersji.az extension add --upgrade --name spring az extension remove --name spring-cloud
Tworzenie aplikacji korzystających z rejestru usług
W tym artykule utworzysz dwie usługi i zarejestrujesz je w usłudze Azure Spring Apps Service Registry. Po rejestracji jedna usługa będzie mogła używać rejestru usług do odnajdywania i wywoływania drugiej usługi. Na poniższym diagramie przedstawiono podsumowanie wymaganych kroków:
Te kroki opisano bardziej szczegółowo w poniższych sekcjach.
- Utwórz usługę A.
- Wdróż usługę A w usłudze Azure Spring Apps i zarejestruj ją w rejestrze usług.
- Utwórz usługę B i zaimplementuj ją w celu wywołania usługi A.
- Wdróż usługę B i zarejestruj ją w rejestrze usług.
- Wywoływanie usługi A za pośrednictwem usługi B.
Tworzenie zmiennych środowiskowych
W tym artykule są używane następujące zmienne środowiskowe. Ustaw te zmienne na wartości użyte podczas tworzenia wystąpienia planu Usługi Azure Spring Apps Enterprise.
Zmienna | opis |
---|---|
$RESOURCE_GROUP | Nazwa grupy zasobów. |
$AZURE_SPRING_APPS_NAME | Nazwa wystąpienia usługi Azure Spring Apps. |
Tworzenie usługi A przy użyciu platformy Spring Boot
Przejdź do narzędzia Spring Initializr , aby utworzyć przykładową usługę A. Ten link używa następującego adresu URL do zainicjowania ustawień.
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
Poniższy zrzut ekranu przedstawia narzędzie Spring Initializr z wymaganymi ustawieniami.
Następnie wybierz pozycję GENERUJ , aby pobrać przykładowy projekt dla platformy Spring Boot z następującą strukturą katalogów.
├── 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
Potwierdź konfigurację bibliotek zależnych dla klienta rejestru usług (klient Eureka)
Następnie upewnij się, że plik pom.xml dla projektu zawiera następującą zależność. Dodaj zależność, jeśli jej brakuje.
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
Implementowanie klienta rejestru usług
Dodaj adnotację @EnableEurekaClient
do pliku SampleServiceAApplication.java , aby skonfigurować ją jako klienta Eureka.
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);
}
}
Tworzenie punktu końcowego REST na potrzeby testowania
Możesz teraz zarejestrować usługę w rejestrze usług, ale nie możesz jej zweryfikować, dopóki nie zaimplementujesz punktu końcowego usługi. Aby utworzyć punkty końcowe RESTful, które mogą wywoływać usługi zewnętrzne, dodaj plik ServiceAEndpoint.java do projektu przy użyciu następującego kodu.
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;
}
}
Kompilowanie aplikacji platformy Spring Boot
Teraz, gdy masz prostą usługę, skompiluj i skompiluj kod źródłowy, uruchamiając następujące polecenie:
mvn clean package
Wdrażanie usługi A i rejestrowanie w rejestrze usług
W tej sekcji wyjaśniono, jak wdrożyć usługę A w wystąpieniu planu Usługi Azure Spring Apps Enterprise i zarejestrować ją w rejestrze usług.
Tworzenie aplikacji usługi Azure Spring Apps
Najpierw utwórz aplikację w usłudze Azure Spring Apps przy użyciu następującego polecenia:
az spring app create \
--resource-group $RESOURCE_GROUP \
--service $AZURE_SPRING_APPS_NAME \
--name serviceA \
--instance-count 1 \
--memory 2Gi \
--assign-endpoint
Argument --assign-endpoint
przyznaje publiczny adres IP do weryfikacji i umożliwia dostęp z sieci zewnętrznej.
Nawiązywanie połączenia z rejestrem usług z poziomu aplikacji
Po utworzeniu wystąpienia usługi za pomocą platformy Spring Boot i utworzeniu aplikacji w usłudze Azure Spring Apps należy wdrożyć aplikację i potwierdzić operację. Przed tym należy jednak powiązać aplikację z rejestrem usług, aby można było uzyskać informacje o połączeniu z rejestru.
Zazwyczaj klient Eureka musi zapisać następujące ustawienia informacji o połączeniu w pliku konfiguracji application.properties aplikacji Spring Boot, aby można było nawiązać połączenie z serwerem:
eureka.client.service-url.defaultZone=http://eureka:8761/eureka/
Jeśli jednak zapiszesz te ustawienia bezpośrednio w aplikacji, musisz ponownie edytować i ponownie ponownie skompilować projekt przy każdym zmianie serwera rejestru usług. Aby uniknąć tego nakładu pracy, usługa Azure Spring Apps umożliwia aplikacjom uzyskiwanie informacji o połączeniu z rejestru usług przez powiązanie z nim. W szczególności po powiązaniu aplikacji z rejestrem usług można uzyskać informacje o połączeniu rejestru usług (eureka.client.service-url.defaultZone
) ze zmiennej środowiskowej Java. W ten sposób można nawiązać połączenie z rejestrem usług, ładując zawartość zmiennych środowiskowych po uruchomieniu aplikacji.
W praktyce do zmiennej JAVA_TOOL_OPTIONS
są dodawane następujące zmienne środowiskowe:
-Deureka.client.service-url.defaultZone=https://$AZURE_SPRING_APPS_NAME.svc.azuremicroservices.io/eureka/default/eureka
Wiązanie usługi z rejestrem usług
Użyj następującego polecenia, aby powiązać usługę z usługą Azure Service Registry, umożliwiając jej nawiązanie połączenia z serwerem.
az spring service-registry bind \
--resource-group $RESOURCE_GROUP \
--service $AZURE_SPRING_APPS_NAME \
--app serviceA
Powiązania aplikacji można również skonfigurować w witrynie Azure Portal, jak pokazano na poniższym zrzucie ekranu:
Uwaga
Propagowanie tych zmian do wszystkich aplikacji po zmianie stanu rejestru usługi potrwa kilka minut.
Jeśli zmienisz stan powiązania/odłączania, musisz ponownie uruchomić lub ponownie wdrożyć aplikację.
Teraz możesz powiązać aplikację z rejestrem usług bezpośrednio podczas tworzenia nowej aplikacji przy użyciu następujących poleceń:
az spring app create \
--resource-group <resource-group> \
--service <service-name> \
--name <app-name> \
--bind-service-registry
Aplikację można również powiązać z rejestrem usług w witrynie Azure Portal, jak pokazano na poniższym zrzucie ekranu:
Wdrażanie aplikacji w usłudze Azure Spring Apps
Po powiązaniu aplikacji wdróż plik artefaktu Spring Boot Sample-Service-A-A-0.0.1-SNAPSHOT.jar w usłudze Azure Spring Apps. Aby wdrożyć, użyj następującego polecenia:
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"
Użyj następującego polecenia, aby sprawdzić, czy wdrożenie zakończyło się pomyślnie.
az spring app list \
--resource-group $RESOURCE_GROUP \
--service $AZURE_SPRING_APPS_NAME \
--output table
To polecenie generuje dane wyjściowe podobne do poniższego przykładu.
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 -
Upewnij się, że aplikacja Service A jest uruchomiona
Dane wyjściowe poprzedniego polecenia zawierają publiczny adres URL usługi. Aby uzyskać dostęp do punktu końcowego RESTful, dołącz go /serviceA
do adresu URL, jak pokazano w poniższym poleceniu:
curl https://$AZURE_SPRING_APPS_NAME-servicea.azuremicroservices.io/serviceA
To polecenie generuje następujące dane wyjściowe.
This is a result of Service A
Usługa A zawiera punkt końcowy RESTful, który wyświetla listę zmiennych środowiskowych. Uzyskaj dostęp do punktu końcowego za pomocą /env
polecenia , aby wyświetlić zmienne środowiskowe, jak pokazano w poniższym poleceniu:
curl https://$AZURE_SPRING_APPS_NAME-servicea.azuremicroservices.io/env
To polecenie generuje następujące dane wyjściowe.
"JAVA_TOOL_OPTIONS":"-Deureka.client.service-url.defaultZone=https://$AZURE_SPRING_APPS_NAME.svc.azuremicroservices.io/eureka/default/eureka
Jak widać, eureka.client.service-url.defaultZone
jest dodawany do elementu JAVA_TOOL_OPTIONS
. W ten sposób aplikacja może zarejestrować usługę w rejestrze usług i udostępnić ją z innych usług.
Teraz możesz zarejestrować usługę w rejestrze usług (Eureka Server) w usłudze Azure Spring Apps. Inne usługi mogą teraz uzyskiwać dostęp do usługi przy użyciu rejestru usług.
Implementowanie nowej usługi B, która uzyskuje dostęp do usługi A za pośrednictwem rejestru usług
Implementowanie usługi B przy użyciu platformy Spring Boot
Przejdź do narzędzia Spring Initializr , aby utworzyć nowy projekt dla usługi B. Ten link używa następującego adresu URL do zainicjowania ustawień:
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
Następnie wybierz pozycję GENERUJ , aby pobrać nowy projekt.
Implementowanie klienta usługi B jako rejestru usług (klient Eureka)
Podobnie jak usługa A, dodaj adnotację @EnableEurekaClient
do usługi B, aby skonfigurować ją jako klienta Eureka.
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);
}
}
Implementowanie punktów końcowych usługi w usłudze B
Następnie zaimplementuj nowy punkt końcowy usługi (/invoke-serviceA
), który wywołuje usługę A. Dodaj plik ServiceBEndpoint.java do projektu przy użyciu następującego kodu.
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;
}
}
W tym przykładzie użyto RestTemplate
dla uproszczenia. Punkt końcowy zwraca ciąg odpowiedzi z innym ciągiem (INVOKE SERVICE A FROM SERVICE B: "
), aby wskazać, że został wywołany przez usługę B.
W tym przykładzie zaimplementowany jest również inny punkt końcowy (/list-all
) na potrzeby walidacji. Ta implementacja gwarantuje, że usługa komunikuje się prawidłowo z rejestrem usług. Ten punkt końcowy można wywołać, aby uzyskać listę aplikacji zarejestrowanych w rejestrze usług.
W tym przykładzie usługa A jest wywoływana jako http://servicea
. Nazwa usługi to nazwa określona podczas tworzenia aplikacji Azure Spring Apps. (Na przykład: az spring app create --name ServiceA
.) Nazwa aplikacji jest zgodna z nazwą usługi zarejestrowaną w rejestrze usług, co ułatwia zarządzanie nazwą usługi.
Kompilowanie usługi B
Użyj następującego polecenia, aby skompilować projekt.
mvn clean package
Wdrażanie usługi B w usłudze Azure Spring Apps
Użyj następującego polecenia, aby utworzyć aplikację w usłudze Azure Spring Apps w celu wdrożenia usługi B.
az spring app create \
--resource-group $RESOURCE_GROUP \
--service $AZURE_SPRING_APPS_NAME \
--name serviceB \
--instance-count 1 \
--memory 2Gi \
--assign-endpoint
Następnie użyj następującego polecenia, aby powiązać aplikację z rejestrem usług.
az spring service-registry bind \
--resource-group $RESOURCE_GROUP \
--service $AZURE_SPRING_APPS_NAME \
--app serviceB
Następnie użyj następującego polecenia, aby wdrożyć usługę.
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"
Następnie użyj następującego polecenia, aby sprawdzić stan aplikacji.
az spring app list \
--resource-group $RESOURCE_GROUP \
--service $AZURE_SPRING_APPS_NAME \
--output table
Jeśli usługa A i usługa B są prawidłowo wdrożone, to polecenie generuje dane wyjściowe podobne do poniższego przykładu.
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 -
Wywoływanie usługi A z usługi B
Dane wyjściowe poprzedniego polecenia zawierają publiczny adres URL usługi. Aby uzyskać dostęp do punktu końcowego RESTful, dołącz go /invoke-serviceA
do adresu URL, jak pokazano w poniższym poleceniu:
curl https://$AZURE_SPRING_APPS_NAME-serviceb.azuremicroservices.io/invoke-serviceA
To polecenie generuje następujące dane wyjściowe:
INVOKE SERVICE A FROM SERVICE B: This is a result of Service A
Uzyskiwanie informacji z rejestru usług
Na koniec uzyskaj dostęp do punktu końcowego /list-all
i pobierz informacje z rejestru usług. Następujące polecenie pobiera listę usług zarejestrowanych w rejestrze usług.
curl https://$AZURE_SPRING_APPS_NAME-serviceb.azuremicroservices.io/list-all
To polecenie generuje następujące dane wyjściowe.
["SERVICEA","EUREKA-SERVER","SERVICEB"]
W ten sposób można uzyskać szczegółowe informacje z programu zgodnie z potrzebami.
Włączanie/wyłączanie rejestru usług po utworzeniu usługi
Rejestr usług można włączyć i wyłączyć po utworzeniu usługi przy użyciu witryny Azure Portal lub interfejsu wiersza polecenia platformy Azure. Przed wyłączeniem rejestru usług wymagane jest usunięcie powiązania wszystkich aplikacji z niego.
Aby włączyć lub wyłączyć usługę Service Registry przy użyciu witryny Azure Portal, wykonaj następujące kroki:
- Przejdź do zasobu usługi, a następnie wybierz pozycję Rejestr usług.
- Zaznacz Zarządzaj.
- Wybierz lub usuń zaznaczenie rejestru usług, a następnie wybierz pozycję Zapisz.
- Stan rejestru usług można teraz wyświetlić na stronie Rejestr usług.