A Tanzu szolgáltatásregisztrációs adatbázis használata
Feljegyzés
Az Alapszintű, a Standard és a Nagyvállalati csomag 2025. március közepétől megszűnik, 3 éves nyugdíjazási időszakkal. Javasoljuk, hogy váltson az Azure Container Appsre. További információkért lásd az Azure Spring Apps kivonási bejelentését.
A standard felhasználás és a dedikált csomag 2024. szeptember 30-tól megszűnik, hat hónap után pedig teljes leállítással. Javasoljuk, hogy váltson az Azure Container Appsre. További információ: Azure Spring Apps Standard-használat migrálása és dedikált csomag az Azure Container Appsbe.
Ez a cikk a következőre vonatkozik:❌ Basic/Standard ✔️ Enterprise
Ez a cikk bemutatja, hogyan használhatja a VMware Tanzu szolgáltatásregisztrációs adatbázist az Azure Spring Apps Enterprise-csomaggal.
A Tanzu Service Registry az egyik kereskedelmi VMware Tanzu-összetevő. Ez az összetevő segít alkalmazni a szolgáltatásfelderítés tervezési mintáját az alkalmazásokra.
A szolgáltatásfelderítés a mikroszolgáltatás-architektúra egyik fő ötlete. Szolgáltatásfelderítés nélkül kézzel kell konfigurálnia egy szolgáltatás egyes ügyfeleit, vagy valamilyen hozzáférési konvenciót kell alkalmaznia. Ez a folyamat nehéz lehet, és a konfigurációk és konvenciók törékenyek lehetnek az éles környezetben. Ehelyett a Tanzu szolgáltatásregisztrációs adatbázisával dinamikusan felderítheti és meghívhatja a regisztrált szolgáltatásokat az alkalmazásban.
Az Azure Spring Apps Enterprise csomaggal nem kell saját maga létrehoznia vagy elindítania a szolgáltatásregisztrációs adatbázist. A Tanzu szolgáltatásregisztrációs adatbázisát úgy használhatja, hogy kiválasztja azt az Azure Spring Apps Enterprise-csomagpéldány létrehozásakor.
Előfeltételek
- Már kiépített Azure Spring Apps Enterprise-csomagpéldány, amelyen engedélyezve van a Tanzu Szolgáltatásregisztrációs adatbázis. További információ : Rövid útmutató: Alkalmazások létrehozása és üzembe helyezése az Azure Spring Appsben a Nagyvállalati csomag használatával.
- Az Azure Spring Apps Enterprise csomagbővítménye. A következő paranccsal távolítsa el a korábbi verziókat, és telepítse a legújabb Enterprise-csomagbővítményt. Ha korábban telepítette a
spring-cloud
bővítményt, távolítsa el a bővítményt a konfiguráció és a verzióeltérések elkerülése érdekében.az extension add --upgrade --name spring az extension remove --name spring-cloud
Service Registryt használó alkalmazások létrehozása
Ebben a cikkben két szolgáltatást hoz létre, és regisztrálja őket az Azure Spring Apps szolgáltatásregisztrációs adatbázisában. A regisztrációt követően az egyik szolgáltatás képes lesz a Szolgáltatásregisztrációs adatbázis használatával felderíteni és meghívni a másik szolgáltatást. Az alábbi diagram a szükséges lépéseket foglalja össze:
Ezeket a lépéseket részletesebben a következő szakaszok ismertetik.
- Az A szolgáltatás létrehozása.
- Helyezze üzembe az A szolgáltatást az Azure Spring Appsben, és regisztrálja azt a Service Registryben.
- Hozza létre a B szolgáltatást, és implementálja az A szolgáltatás meghívásához.
- Telepítse a B szolgáltatást, és regisztrálja a Szolgáltatásregisztrációs adatbázisban.
- Az A szolgáltatás meghívása a B szolgáltatáson keresztül.
Környezeti változók létrehozása
Ez a cikk a következő környezeti változókat használja. Állítsa be ezeket a változókat az Azure Spring Apps Enterprise-csomagpéldány létrehozásakor használt értékekre.
Változó | Leírás |
---|---|
$RESOURCE_GROUP | Az erőforráscsoport neve. |
$AZURE_SPRING_APPS_NAME | Azure Spring Apps-példány neve. |
A szolgáltatás létrehozása Spring Boot használatával
Lépjen a Spring Initializrre az A mintaszolgáltatás létrehozásához. Ez a hivatkozás a következő URL-címet használja a beállítások inicializálásához.
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
Az alábbi képernyőképen a Spring Initializr látható a szükséges beállításokkal.
Ezután válassza a GENERATE lehetőséget a Spring Boot mintaprojektjének lekéréséhez a következő könyvtárstruktúrával.
├── 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
A függő kódtárak konfigurálásának megerősítése a Service Registry-ügyfélhez (Eureka-ügyfél)
Ezután győződjön meg arról, hogy a projekt pom.xml fájlja a következő függőséget tartalmazza. Adja hozzá a függőséget, ha hiányzik.
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
A Service Registry-ügyfél implementálása
Adjon hozzá egy megjegyzést @EnableEurekaClient
a SampleServiceAApplication.java fájlhoz eureka-ügyfélként való konfigurálásához.
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);
}
}
REST-végpont létrehozása teszteléshez
Most már regisztrálhatja a szolgáltatást a Szolgáltatásregisztrációs adatbázisban, de nem ellenőrizheti, amíg nem implementál egy szolgáltatásvégpontot. Ha olyan RESTful végpontokat szeretne létrehozni, amelyeket a külső szolgáltatások meghívhatnak, adjon hozzá egy ServiceAEndpoint.java fájlt a projekthez az alábbi kóddal.
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-alkalmazás készítése
Most, hogy már rendelkezik egy egyszerű szolgáltatással, fordítsa le és hozza létre a forráskódot az alábbi parancs futtatásával:
mvn clean package
Az A szolgáltatás üzembe helyezése és regisztrálás a Service Registryben
Ez a szakasz bemutatja, hogyan helyezheti üzembe az A szolgáltatást egy Azure Spring Apps Enterprise-csomagpéldányon, és hogyan regisztrálhatja azt a Service Registryben.
Azure Spring Apps-alkalmazás létrehozása
Először hozzon létre egy alkalmazást az Azure Spring Appsben a következő paranccsal:
az spring app create \
--resource-group $RESOURCE_GROUP \
--service $AZURE_SPRING_APPS_NAME \
--name serviceA \
--instance-count 1 \
--memory 2Gi \
--assign-endpoint
Az --assign-endpoint
argumentum nyilvános IP-címet ad az ellenőrzéshez, és engedélyezi a külső hálózatról való hozzáférést.
Csatlakozás a szolgáltatásregisztrációs adatbázishoz az alkalmazásból
Miután létrehozott egy szolgáltatáspéldányt a Spring Boot használatával, és létrehozott egy alkalmazást az Azure Spring Appsben, üzembe helyezi az alkalmazást, és megerősíti a műveletet. Ezt megelőzően azonban az alkalmazást a szolgáltatásregisztrációs adatbázishoz kell kötnie, hogy az le tudja szerezni a kapcsolati adatokat a beállításjegyzékből.
Az Eureka-ügyfélnek általában meg kell írnia a következő kapcsolatinformációs beállításokat egy Spring Boot-alkalmazás application.properties konfigurációs fájljában, hogy csatlakozni tud a kiszolgálóhoz:
eureka.client.service-url.defaultZone=http://eureka:8761/eureka/
Ha azonban ezeket a beállításokat közvetlenül az alkalmazásba írja, újra kell szerkesztenie és újra kell építenie a projektet minden alkalommal, amikor a Service Registry-kiszolgáló megváltozik. Ennek elkerülése érdekében az Azure Spring Apps lehetővé teszi az alkalmazások számára a kapcsolati adatok lekérését a szolgáltatásregisztrációs adatbázisból kötéssel. Pontosabban, miután az alkalmazást a Szolgáltatásregisztrációs adatbázishoz kötötte, lekérheti a szolgáltatásregisztrációs adatbázis kapcsolati adatait (eureka.client.service-url.defaultZone
) a Java környezeti változóból. Ily módon csatlakozhat a szolgáltatásregisztrációs adatbázishoz úgy, hogy betölti a környezeti változók tartalmát az alkalmazás indításakor.
A gyakorlatban a következő környezeti változók lesznek hozzáadva a JAVA_TOOL_OPTIONS
változóhoz:
-Deureka.client.service-url.defaultZone=https://$AZURE_SPRING_APPS_NAME.svc.azuremicroservices.io/eureka/default/eureka
Szolgáltatás kötése a szolgáltatásregisztrációs adatbázishoz
A következő paranccsal kötheti a szolgáltatást az Azure Service Registryhez, lehetővé téve a kiszolgálóhoz való csatlakozást.
az spring service-registry bind \
--resource-group $RESOURCE_GROUP \
--service $AZURE_SPRING_APPS_NAME \
--app serviceA
Az alkalmazáskötéseket az Azure Portalról is beállíthatja, ahogyan az alábbi képernyőképen látható:
Feljegyzés
Ezek a módosítások a szolgáltatásregisztrációs adatbázis állapotának megváltozásakor néhány percet vesznek igénybe az összes alkalmazásra való propagáláshoz.
Ha módosítja a kötés/kötés megszüntetésének állapotát, újra kell indítania vagy újra kell üzembe helyeznie az alkalmazást.
Most már dönthet úgy, hogy közvetlenül a Szolgáltatásregisztrációs adatbázishoz köti az alkalmazást új alkalmazás létrehozásakor az alábbi parancsokkal:
az spring app create \
--resource-group <resource-group> \
--service <service-name> \
--name <app-name> \
--bind-service-registry
Az alkalmazást az Azure Portalról is kötheti a szolgáltatásregisztrációs adatbázishoz, ahogy az alábbi képernyőképen látható:
Alkalmazás üzembe helyezése az Azure Spring Appsben
Most, hogy kötötte az alkalmazást, telepítse a Spring Boot összetevőfájlt Sample-Service-A-A-0.0.1-SNAPSHOT.jar az Azure Spring Appsben. Az üzembe helyezéshez használja a következő parancsot:
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"
Az alábbi paranccsal ellenőrizheti, hogy az üzembe helyezés sikeres-e.
az spring app list \
--resource-group $RESOURCE_GROUP \
--service $AZURE_SPRING_APPS_NAME \
--output table
Ez a parancs az alábbi példához hasonló kimenetet hoz létre.
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 -
Győződjön meg arról, hogy az A szolgáltatásalkalmazás fut
Az előző parancs kimenete tartalmazza a szolgáltatás nyilvános URL-címét. A RESTful végpont eléréséhez fűzze hozzá /serviceA
az URL-címet az alábbi parancsban látható módon:
curl https://$AZURE_SPRING_APPS_NAME-servicea.azuremicroservices.io/serviceA
Ez a parancs a következő kimenetet hozza létre.
This is a result of Service A
Az A szolgáltatás tartalmaz egy RESTful végpontot, amely megjeleníti a környezeti változók listáját. A végpont elérése /env
a környezeti változók megtekintéséhez, ahogyan az a következő parancsban látható:
curl https://$AZURE_SPRING_APPS_NAME-servicea.azuremicroservices.io/env
Ez a parancs a következő kimenetet hozza létre.
"JAVA_TOOL_OPTIONS":"-Deureka.client.service-url.defaultZone=https://$AZURE_SPRING_APPS_NAME.svc.azuremicroservices.io/eureka/default/eureka
Mint látható, eureka.client.service-url.defaultZone
a rendszer hozzáadja a JAVA_TOOL_OPTIONS
. Ily módon az alkalmazás regisztrálhatja a szolgáltatást a szolgáltatásregisztrációs adatbázisban, és elérhetővé teheti más szolgáltatásokból.
Most már regisztrálhatja a szolgáltatást az Azure Spring Apps szolgáltatásregisztrációs adatbázisában (Eureka Server). Mostantól más szolgáltatások is hozzáférhetnek a szolgáltatáshoz a szolgáltatásregisztrációs adatbázis használatával.
Új B szolgáltatás implementálása, amely a Szolgáltatásregisztrációs adatbázison keresztül fér hozzá az A szolgáltatáshoz
A B szolgáltatás implementálása a Spring Boot használatával
A Spring Initializrre lépve hozzon létre egy új projektet a B szolgáltatáshoz. Ez a hivatkozás a következő URL-címet használja a beállítások inicializálásához:
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
Ezután válassza a GENERATE lehetőséget az új projekt lekéréséhez.
A B szolgáltatás implementálása szolgáltatásregisztrációs ügyfélként (Eureka-ügyfél)
Az A szolgáltatáshoz hasonlóan adja hozzá a megjegyzést a @EnableEurekaClient
B szolgáltatáshoz eureka-ügyfélként való konfigurálásához.
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);
}
}
Szolgáltatásvégpontok implementálása a B szolgáltatásban
Ezután implementáljon egy új szolgáltatásvégpontot (/invoke-serviceA
), amely meghívja az A szolgáltatást. Adjon hozzá egy ServiceBEndpoint.java fájlt a projekthez az alábbi kóddal.
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;
}
}
Ez a példa az egyszerűség kedvéért használható RestTemplate
. A végpont egy másik sztringgel (INVOKE SERVICE A FROM SERVICE B: "
) adja vissza a válaszsztringet, amely jelzi, hogy a B szolgáltatás meghívta.
Ez a példa egy másik végpontot (/list-all
) is implementál az ellenőrzéshez. Ez a megvalósítás biztosítja, hogy a szolgáltatás megfelelően kommunikál a szolgáltatásregisztrációs adatbázissal. Ezt a végpontot meghívva lekérheti a szolgáltatásregisztrációs adatbázisban regisztrált alkalmazások listáját.
Ez a példa meghívja a Service A as parancsot http://servicea
. A szolgáltatásnév az Azure Spring Apps-alkalmazás létrehozása során megadott név. (Például: az spring app create --name ServiceA
.) Az alkalmazás neve megegyezik a szolgáltatásregisztrációs adatbázisban regisztrált szolgáltatásnévvel, így egyszerűbbé válik a szolgáltatásnév kezelése.
B buildszolgáltatás
A projekt létrehozásához használja az alábbi parancsot.
mvn clean package
A B szolgáltatás üzembe helyezése az Azure Spring Appsben
Az alábbi paranccsal hozzon létre egy alkalmazást az Azure Spring Appsben a B szolgáltatás üzembe helyezéséhez.
az spring app create \
--resource-group $RESOURCE_GROUP \
--service $AZURE_SPRING_APPS_NAME \
--name serviceB \
--instance-count 1 \
--memory 2Gi \
--assign-endpoint
Ezután az alábbi paranccsal kösse az alkalmazást a Szolgáltatásregisztrációs adatbázishoz.
az spring service-registry bind \
--resource-group $RESOURCE_GROUP \
--service $AZURE_SPRING_APPS_NAME \
--app serviceB
Ezután a következő paranccsal helyezze üzembe a szolgáltatást.
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"
Ezután az alábbi paranccsal ellenőrizze az alkalmazás állapotát.
az spring app list \
--resource-group $RESOURCE_GROUP \
--service $AZURE_SPRING_APPS_NAME \
--output table
Ha az A szolgáltatás és a B szolgáltatás megfelelően van üzembe helyezve, ez a parancs az alábbi példához hasonló kimenetet hoz létre.
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 -
Az A szolgáltatás meghívása a B szolgáltatásból
Az előző parancs kimenete tartalmazza a szolgáltatás nyilvános URL-címét. A RESTful végpont eléréséhez fűzze hozzá /invoke-serviceA
az URL-címet az alábbi parancsban látható módon:
curl https://$AZURE_SPRING_APPS_NAME-serviceb.azuremicroservices.io/invoke-serviceA
Ez a parancs a következő kimenetet hozza létre:
INVOKE SERVICE A FROM SERVICE B: This is a result of Service A
Információ lekérése a Szolgáltatásregisztrációs adatbázisból
Végül hozzáférjen a /list-all
végponthoz, és kérjen le néhány információt a szolgáltatásregisztrációs adatbázisból. Az alábbi parancs lekéri a szolgáltatásregisztrációs adatbázisban regisztrált szolgáltatások listáját.
curl https://$AZURE_SPRING_APPS_NAME-serviceb.azuremicroservices.io/list-all
Ez a parancs a következő kimenetet hozza létre.
["SERVICEA","EUREKA-SERVER","SERVICEB"]
Ily módon igény szerint részletes információkat szerezhet be a programból.
Szolgáltatásregisztrációs adatbázis engedélyezése/letiltása a szolgáltatás létrehozása után
A szolgáltatás létrehozása után engedélyezheti és letilthatja a szolgáltatásregisztrációs adatbázist az Azure Portal vagy az Azure CLI használatával. A Szolgáltatásregisztrációs adatbázis letiltása előtt le kell tiltani az összes alkalmazás kötését.
A Következő lépésekkel engedélyezheti vagy letilthatja a Szolgáltatásregisztrációs adatbázist az Azure Portalon:
- Keresse meg a szolgáltatáserőforrást, majd válassza a Szolgáltatásregisztrációs adatbázis lehetőséget.
- Válassza a Kezelés lehetőséget.
- Válassza a Szolgáltatásregisztrációs adatbázis engedélyezése jelölőnégyzetet, vagy törölje a jelölését, majd válassza a Mentés lehetőséget.
- A Szolgáltatásregisztrációs adatbázis állapotát a Szolgáltatásregisztrációs adatbázis lapon tekintheti meg.