A Tanzu szolgáltatásregisztrációs adatbázis használata

Feljegyzés

Az Azure Spring Apps az Azure Spring Cloud szolgáltatás új neve. Bár a szolgáltatásnak új neve van, bizonyos helyeken a régi nevet fogja látni egy darabig, miközben az eszközök, például képernyőképek, videók és diagramok frissítésével dolgozunk.

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:

Az A szolgáltatás és a B szolgáltatás létrehozásának, üzembe helyezésének és regisztrálásának lépéseit bemutató ábra.

Ezeket a lépéseket részletesebben a következő szakaszok ismertetik.

  1. Az A szolgáltatás létrehozása.
  2. Helyezze üzembe az A szolgáltatást az Azure Spring Appsben, és regisztrálja azt a Service Registryben.
  3. Hozza létre a B szolgáltatást, és implementálja az A szolgáltatás meghívásához.
  4. Telepítse a B szolgáltatást, és regisztrálja a Szolgáltatásregisztrációs adatbázisban.
  5. 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.

Képernyőkép a Spring Initializr oldalról, amelyen a szükséges beállítások láthatók.

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ázisba 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ó:

Képernyőkép az Azure Portalról, amelyen a Szolgáltatásregisztrációs adatbázis lap látható, és az alkalmazáskötés legördülő listája ki van emelve.

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ó:

Képernyőkép az Azure Portalról, amelyen az Alkalmazás létrehozása lap látható, és a Kötés legördülő lista ki van emelve.

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:

  1. Keresse meg a szolgáltatáserőforrást, majd válassza a Szolgáltatásregisztrációs adatbázis lehetőséget.
  2. Válassza a Kezelés lehetőséget.
  3. 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.
  4. A Szolgáltatásregisztrációs adatbázis állapotát a Szolgáltatásregisztrációs adatbázis lapon tekintheti meg.

Következő lépések