Udostępnij za pośrednictwem


Nawiązywanie połączenia z zarządzanym serwerem Eureka dla platformy Spring w usłudze Azure Container Apps

Eureka Server for Spring to rejestr usług, który umożliwia mikrousługi zarejestrowanie się i odnajdywanie innych usług. Serwer Eureka dla platformy Spring jest dostępny jako składnik usługi Azure Container Apps. Aplikację kontenera można powiązać z serwerem Eureka dla platformy Spring w celu automatycznej rejestracji na serwerze Eureka.

Z tego samouczka dowiesz się, jak wykonywać następujące czynności:

  • Utwórz serwer Eureka dla komponentu Spring Java.
  • powiąż aplikację kontenerową z komponentem Eureka Server for Spring Java.

Ważne

W tym samouczku są używane usługi, które mogą mieć wpływ na rachunek za korzystanie z platformy Azure. Jeśli zdecydujesz się postępować zgodnie z instrukcjami, upewnij się, że usunięto zasoby opisane w tym artykule, aby uniknąć nieoczekiwanych rozliczeń.

Wymagania wstępne

  • Konto platformy Azure z aktywną subskrypcją. Jeśli jeszcze go nie masz, możesz go utworzyć bezpłatnie.
  • Azure CLI.

Kwestie wymagające rozważenia

Podczas uruchamiania serwera Eureka dla platformy Spring w usłudze Container Apps należy pamiętać o następujących szczegółach:

Towar Wyjaśnienie
Scope Składnik Eureka Server for Spring działa w tym samym środowisku co połączona aplikacja kontenera.
Skalowanie Składnik Eureka server for Spring nie może być skalowany. Właściwości skalowania minReplicas i maxReplicas są oba ustawione na 1 tę samą wartość. Aby uzyskać wysoką dostępność, zobacz Tworzenie usługi Eureka o wysokiej dostępności w usłudze Container Apps.
Zasoby Alokacja zasobów kontenera dla serwera Eureka dla platformy Spring jest stała. Liczba rdzeni procesora CPU wynosi 0,5, a rozmiar pamięci to 1 Gi.
Cennik Opłaty za serwer Eureka dla platformy Spring są objęte cenami opartymi na użyciu. Zasoby używane przez zarządzane składniki Java są rozliczane według stawek aktywnych/bezczynnych. Możesz usunąć składniki, które nie są już używane do zatrzymywania rozliczeń.
Wiązanie Aplikacje kontenerowe łączą się z serwerem Eureka dla komponentu Spring za pośrednictwem powiązania. Powiązania wprowadzają konfiguracje do zmiennych środowiskowych aplikacji kontenera. Po ustanowieniu powiązania aplikacja kontenera może odczytywać wartości konfiguracji ze zmiennych środowiskowych i łączyć się ze składnikiem Eureka Server for Spring.

Ustawienia

Przed rozpoczęciem pracy ze składnikiem Eureka Server for Spring należy najpierw utworzyć wymagane zasoby.

Uruchom następujące polecenia, aby utworzyć grupę zasobów w środowisku aplikacji kontenera.

  1. Utwórz zmienne do obsługi konfiguracji aplikacji. Te wartości są udostępniane na potrzeby tej lekcji.

    export LOCATION=eastus
    export RESOURCE_GROUP=my-services-resource-group
    export ENVIRONMENT=my-environment
    export EUREKA_COMPONENT_NAME=eureka
    export APP_NAME=my-eureka-client
    export IMAGE="mcr.microsoft.com/javacomponents/samples/sample-service-eureka-client:latest"
    
    Zmienna opis
    LOCATION Lokalizacja regionu świadczenia usługi Azure, w której tworzysz aplikację kontenera i składnik Java.
    ENVIRONMENT Nazwa środowiska aplikacji kontenera dla aplikacji demonstracyjnej.
    RESOURCE_GROUP Nazwa grupy zasobów platformy Azure dla aplikacji demonstracyjnej.
    EUREKA_COMPONENT_NAME Nazwa składnika Java utworzonego dla aplikacji kontenera. W tym przypadku utworzysz składnik Eureka Server for Spring Java.
    IMAGE Obraz kontenera używany w aplikacji kontenera.
  2. Zaloguj się do Azure przy użyciu Azure CLI.

    az login
    
  3. Utwórz grupę zasobów.

    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  4. Utwórz środowisko aplikacji kontenera.

    az containerapp env create \
      --name $ENVIRONMENT \
      --resource-group $RESOURCE_GROUP \
      --location $LOCATION
    

Tworzenie składnika Eureka Server for Spring Java

Teraz, gdy masz istniejące środowisko, możesz utworzyć aplikację kontenerową i powiązać ją z instancją komponentu Java serwera Eureka dla Spring.

  1. Utwórz składnik Eureka Server for Spring Java.

    az containerapp env java-component eureka-server-for-spring create \
        --environment $ENVIRONMENT \
        --resource-group $RESOURCE_GROUP \
        --name $EUREKA_COMPONENT_NAME
    
  2. Opcjonalnie: zaktualizuj konfigurację składnika Eureka Server for Spring Java.

    az containerapp env java-component eureka-server-for-spring update \
        --environment $ENVIRONMENT \
        --resource-group $RESOURCE_GROUP \
        --name $EUREKA_COMPONENT_NAME
        --configuration eureka.server.renewal-percent-threshold=0.85 eureka.server.eviction-interval-timer-in-ms=10000
    

Powiąż swoją aplikację kontenerową z komponentem Eureka Server for Spring Java

  1. Utwórz aplikację kontenera i powiąż ją ze składnikiem Eureka Server for Spring.

    az containerapp create \
        --name $APP_NAME \
        --resource-group $RESOURCE_GROUP \
        --environment $ENVIRONMENT \
        --image $IMAGE \
        --min-replicas 1 \
        --max-replicas 1 \
        --ingress external \
        --target-port 8080 \
        --bind $EUREKA_COMPONENT_NAME \
        --query properties.configuration.ingress.fqdn
    
  2. Skopiuj adres URL aplikacji do edytora tekstów, aby można było go użyć w następnym kroku.

Wróć do aplikacji kontenerowej w portalu. Skopiuj adres URL aplikacji do edytora tekstów, aby można było go użyć w następnym kroku.

Przejdź do ścieżki /allRegistrationStatus, aby wyświetlić wszystkie aplikacje zarejestrowane w serwerze Eureka Server for Spring.

Powiązanie wprowadza kilka konfiguracji do aplikacji jako zmienne środowiskowe, przy czym najważniejsza jest właściwość eureka.client.service-url.defaultZone. Ta właściwość wskazuje wewnętrzny punkt końcowy składnika Java serwera Eureka.

Powiązanie wprowadza również następujące właściwości:

"eureka.client.register-with-eureka":    "true"
"eureka.client.fetch-registry":          "true"
"eureka.instance.prefer-ip-address":     "true"

Właściwość eureka.client.register-with-eureka jest ustawiona na true, aby wymusić rejestrację na serwerze Eureka. Ta rejestracja zastępuje ustawienie lokalne w application.properties, pochodzące z serwera konfiguracji. Jeśli chcesz ustawić ją na false, możesz ją zastąpić, ustawiając zmienną środowiskową w aplikacji kontenera.

Właściwość eureka.instance.prefer-ip-address jest ustawiona na true z powodu określonej reguły rozpoznawania nazw domen w środowisku kontenerowej aplikacji. Nie modyfikuj tej wartości, aby nie przerywać powiązania.

Opcjonalnie: Odłącz aplikację kontenerową od komponentu Eureka Server for Spring Java

Aby usunąć powiązanie z aplikacji kontenera, użyj --unbind opcji .

az containerapp update \
    --name $APP_NAME \
    --unbind $JAVA_COMPONENT_NAME \
    --resource-group $RESOURCE_GROUP

Wyświetlanie aplikacji za pośrednictwem pulpitu nawigacyjnego

Ważne

Aby wyświetlić pulpit nawigacyjny, musisz mieć przypisaną co najmniej rolę Microsoft.App/managedEnvironments/write do konta w zasobie zarządzanego środowiska. Możesz jawnie przypisać zasobowi rolę Owner lub Contributor. Możesz również wykonać kroki tworzenia niestandardowej definicji roli i przypisywania jej do konta.

Uwaga

Pulpit nawigacyjny nie jest dostępny w regionie Azure Chiny 21Vianet.

  1. Utwórz niestandardową definicję roli.

    az role definition create --role-definition '{
        "Name": "<YOUR_ROLE_NAME>",
        "IsCustom": true,
        "Description": "Can access managed Java Component dashboards in managed environments",
        "Actions": [
            "Microsoft.App/managedEnvironments/write"
        ],
        "AssignableScopes": ["/subscriptions/<SUBSCRIPTION_ID>"]
    }'
    

    Pamiętaj, aby zastąpić symbol zastępczy <SUBSCRIPTION_ID> wewnątrz wartości AssignableScopes identyfikatorem subskrypcji.

  2. Przypisz rolę niestandardową swojemu kontu w zarządzanym zasobie środowiskowym.

    Pobierz identyfikator zasobu środowiska zarządzanego:

    export ENVIRONMENT_ID=$(az containerapp env show \
        --name $ENVIRONMENT --resource-group $RESOURCE_GROUP \
        --query id \
        --output tsv)
    
  3. Przypisz rolę do swojego konta.

    Przed uruchomieniem tego polecenia zastąp symbole zastępcze oznaczone nawiasami <> identyfikatorem użytkownika lub usługi głównej oraz nazwą roli.

    az role assignment create \
        --assignee <USER_OR_SERVICE_PRINCIPAL_ID> \
        --role "<ROLE_NAME>" \
        --scope $ENVIRONMENT_ID
    

    Uwaga

    Wartość <USER_OR_SERVICE_PRINCIPAL_ID> zwykle powinna być tożsamością używaną do uzyskiwania dostępu do witryny Azure Portal. Wartość <ROLE_NAME> to nazwa przypisana w kroku 1.

  4. Pobierz adres URL serwera Eureka dla pulpitu nawigacyjnego Platformy Spring.

    az containerapp env java-component eureka-server-for-spring show \
        --environment $ENVIRONMENT \
        --resource-group $RESOURCE_GROUP \
        --name $EUREKA_COMPONENT_NAME \
        --query properties.ingress.fqdn \
        --output tsv
    

    To polecenie zwraca adres URL, którego można użyć do uzyskania dostępu do pulpitu nawigacyjnego Eureka Server for Spring. Pulpit nawigacyjny umożliwia również wyświetlanie aplikacji kontenera, jak pokazano na poniższym zrzucie ekranu.

    Zrzut ekranu przedstawiający pulpit nawigacyjny Eureka Server for Spring.

Opcjonalnie: integrowanie serwera Eureka dla składników Spring i Admin for Spring Java

Jeśli chcesz zintegrować serwer Eureka dla Spring i komponenty Admin for Spring Java, zobacz Integracja zarządzanego Admin for Spring z serwerem Eureka dla Spring.

Czyszczenie zasobów

Zasoby utworzone w tym samouczku mają wpływ na Twój rachunek za platformę Azure. Jeśli nie zamierzasz korzystać z tych usług długoterminowo, uruchom następujące polecenie, aby usunąć wszystkie elementy utworzone w tym samouczku.

az group delete --resource-group $RESOURCE_GROUP

Lista dozwolonych konfiguracji serwera Eureka dla platformy Spring

W poniższych sekcjach opisano obsługiwane konfiguracje. Aby uzyskać więcej informacji, zobacz Spring Cloud Eureka Server.

Uwaga

Prześlij zgłoszenia dotyczące nowych funkcji.

Opcje konfiguracji

Polecenie az containerapp update używa parametru --configuration , aby kontrolować sposób konfigurowania serwera Eureka dla platformy Spring. Można używać wielu parametrów jednocześnie, o ile są one oddzielone spacją. Aby uzyskać więcej informacji, zobacz Spring Cloud Eureka Server.

Następujące ustawienia konfiguracji są dostępne we eureka.server właściwości konfiguracji:

Nazwisko opis Domyślna wartość
eureka.server.enable-self-preservation Po włączeniu serwer śledzi liczbę odnowień, które powinien otrzymać od serwera. Za każdym razem, gdy liczba odnowień spadnie poniżej wartości procentowej progowej zdefiniowanej przez eureka.server.renewal-percent-threshold. Wartość domyślna jest ustawiona na true w oryginalnym serwerze Eureka, ale w składniku Eureka Server Java wartość domyślna jest ustawiona na false. Zobacz Ograniczenia składnika Eureka Server for Spring Java. false
eureka.server.renewal-percent-threshold Minimalny procent odnowień, który jest oczekiwany od klientów w okresie określonym przez eureka.server.renewal-threshold-update-interval-ms. Jeśli odnowienia spadną poniżej progu, wygasanie zostanie wyłączone, jeśli eureka.server.enable-self-preservation jest włączona. 0.85
eureka.server.renewal-threshold-update-interval-ms Częstotliwość, z jaką próg — jak określono w eureka.server.renewal-percent-threshold — musi zostać zaktualizowany. 0
eureka.server.expected-client-renewal-interval-seconds Interwał, z którym klienci mają wysyłać pulsy. Wartość domyślna to 30 sekund. Jeśli klienci wysyłają pulsy z inną częstotliwością, powiedzmy, co 15 sekund, ten parametr powinien być odpowiednio dostrojony, w przeciwnym razie samozachowawanie nie będzie działać zgodnie z oczekiwaniami. 30
eureka.server.response-cache-auto-expiration-in-seconds Pobiera czas, dla którego ładunek rejestru powinien być przechowywany w pamięci podręcznej, jeśli nie zostanie on unieważniony przez zdarzenia zmiany. 180
eureka.server.response-cache-update-interval-ms Pobiera przedział czasu, z którym powinna zostać zaktualizowana pamięć podręczna ładunku klienta. 0
eureka.server.use-read-only-response-cache com.netflix.eureka.registry.ResponseCache obecnie używa dwupoziomowej strategii buforowania dla odpowiedzi. Pamięć podręczna readWrite z polityką wygasania oraz pamięć podręczna readonly przechowująca dane bez wygaśnięcia. true
eureka.server.disable-delta Sprawdza, czy informacje różnicowe mogą być dostarczone klientowi. false
eureka.server.retention-time-in-m-s-in-delta-queue Uzyskaj czas, przez który informacje różnicowe powinny zostać przechowane w pamięci podręcznej, aby klienci mogli pobrać wartość bez pominięcia. 0
eureka.server.delta-retention-timer-interval-in-ms Uzyskaj interwał czasu, z którym zadanie oczyszczania powinno się budzić, aby sprawdzić, czy wygasły informacje o różnicach. 0
eureka.server.eviction-interval-timer-in-ms Uzyskaj interwał czasu, z którym zadanie zajmujące się wygasaniem instancji powinno zostać uruchomione. 60000
eureka.server.sync-when-timestamp-differs Sprawdza, czy mają być synchronizowane wystąpienia, gdy sygnatura czasowa się różni. true
eureka.server.rate-limiter-enabled Wskazuje, czy ogranicznik szybkości powinien być włączony, czy wyłączony. false
eureka.server.rate-limiter-burst-size Ogranicznik szybkości, właściwość algorytmu zasobnika tokenu. 10
eureka.server.rate-limiter-registry-fetch-average-rate Ogranicznik szybkości, właściwość algorytmu zasobnika tokenu. Określa średnie wymuszone tempo żądań. 500
eureka.server.rate-limiter-privileged-clients Lista certyfikowanych klientów. Jest to dodatek do standardowych klientów eureka Java. N/A
eureka.server.rate-limiter-throttle-standard-clients Określ, czy na standardowych klientów należy nałożyć ograniczenie szybkości. Jeśli ustawiono wartość false, tylko niestandardowi klienci są ograniczeni szybkością. false
eureka.server.rate-limiter-full-fetch-average-rate Ogranicznik szybkości, właściwość algorytmu zasobnika tokenu. Określa średnią wymuszoną szybkość żądań. 100

Typowe konfiguracje

  • Rejestrowanie powiązanych konfiguracji:
    • logging.level.*
    • logging.group.*
    • Wszelkie inne konfiguracje w przestrzeni nazw logging.* powinny być zabronione — na przykład zapisywanie plików dziennika przy użyciu logging.file powinno być zabronione.

Komunikacja między aplikacjami

W tym przykładzie pokazano, jak napisać kod Java w celu umożliwienia komunikacji między aplikacjami zarejestrowanymi w serwerze Eureka dla komponentu Spring. Gdy aplikacje kontenerów są powiązane z usługą Eureka, komunikują się ze sobą za pośrednictwem serwera Eureka.

W przykładzie tworzone są dwie aplikacje: aplikacja wywołująca i aplikacja wywoływana. Obie aplikacje komunikują się między sobą przy użyciu składnika Eureka Server for Spring. Aplikacja docelowa udostępnia punkt końcowy, na który aplikacja inicjująca kieruje wywołania.

  1. Utwórz aplikację przyjmującą wywołania. Włącz klienta Eureka w aplikacji Spring Boot, dodając adnotację @EnableDiscoveryClient do klasy głównej.

    @SpringBootApplication
    @EnableDiscoveryClient
    public class CalleeApplication {
      public static void main(String[] args) {
        SpringApplication.run(CalleeApplication.class, args);
      }
    }
    
  2. Utwórz punkt końcowy w aplikacji odbiorcy, który jest wywoływany przez aplikację inicjującą.

    @RestController
    public class CalleeController {
    
        @GetMapping("/call")
        public String calledByCaller() {
            return "Hello from Application callee!";
        }
    }
    
  3. Ustaw nazwę aplikacji docelowej w pliku konfiguracji aplikacji, np. w application.yml.

    spring.application.name=callee
    
  4. Utwórz aplikację wywołującą.

    Dodaj adnotację @EnableDiscoveryClient , aby włączyć funkcję klienta Eureka. Ponadto utwórz bean WebClient.Builder z adnotacją @LoadBalanced, aby wykonywać wywołania z równoważeniem obciążenia do innych usług.

    @SpringBootApplication
    @EnableDiscoveryClient
    public class CallerApplication {
      public static void main(String[] args) {
        SpringApplication.run(CallerApplication.class, args);
      }
    
      @Bean
      @LoadBalanced
      public WebClient.Builder loadBalancedWebClientBuilder() {
        return WebClient.builder();
      }
    }
    
  5. Utwórz kontroler w aplikacji wywołującej, który używa WebClient.Builder do wywoływania aplikacji przy użyciu jej nazwy aplikacji, wywoływanej.

    @RestController
    public class CallerController {
        @Autowired
        private WebClient.Builder webClientBuilder;
    
        @GetMapping("/call-callee")
        public Mono<String> callCallee() {
            return webClientBuilder.build()
                .get()
                .uri("http://callee/call")
                .retrieve()
                .bodyToMono(String.class);
        }
    }
    

Teraz masz aplikacje wywołującą i odbierającą, które komunikują się ze sobą nawzajem używając Serwera Eureka dla komponentów Spring Java. Przed przetestowaniem /call-callee punktu końcowego w aplikacji wywołującej upewnij się, że obie aplikacje są uruchomione i powiązane z serwerem Eureka.

Ograniczenia

  • Składnik Java serwera Eureka jest dostarczany z domyślną konfiguracją , eureka.server.enable-self-preservationustawioną na false. Ta domyślna konfiguracja pomaga uniknąć sytuacji, w których wystąpienia nie są usuwane po włączeniu samozachowawczości. Jeśli instancje są usuwane zbyt wcześnie, niektóre żądania mogą być kierowane do nieistniejących instancji. Jeśli chcesz zmienić to ustawienie na true, możesz go zastąpić, ustawiając własne konfiguracje w składniku Języka Java.
  • Panel Eureka nie jest dostępny w Azure China 21Vianet.

Następne kroki

Integrowanie zarządzanego administratora platformy Spring z serwerem Eureka dla platformy Spring