Samouczek: nawiązywanie połączenia z zarządzanym serwerem Eureka dla rozwiązania 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 składnik Eureka Server for Spring Java.
- Powiąż aplikację kontenera ze składnikiem 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.
- Interfejs wiersza polecenia platformy Azure.
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 | Serwer Eureka dla spring conponent nie może skalować. Właściwości minReplicas skalowania i maxReplicas są ustawione na 1 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 kontenera łączą się z serwerem Eureka dla składnika 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.
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. Zaloguj się na platformie Azure przy użyciu interfejsu wiersza polecenia platformy Azure.
az login
Utwórz grupę zasobów.
az group create --name $RESOURCE_GROUP --location $LOCATION
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ę kontenera i powiązać ją z wystąpieniem składnika Java serwera Eureka dla platformy Spring.
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
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
Wiązanie aplikacji kontenera ze składnikiem Eureka Server for Spring Java
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
Skopiuj adres URL aplikacji do edytora tekstów, aby można było go użyć w następnym kroku.
Wróć do aplikacji kontenera w portalu. Skopiuj adres URL aplikacji do edytora tekstów, aby można było go użyć w następnym kroku.
Przejdź do trasy, /allRegistrationStatus
aby wyświetlić wszystkie aplikacje zarejestrowane w składniku Eureka Server for Spring.
Powiązanie wprowadza kilka konfiguracji do aplikacji jako zmienne środowiskowe, przede wszystkim eureka.client.service-url.defaultZone
właściwość . 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ść jest ustawiona eureka.client.register-with-eureka
na wartość , aby wymusić true
rejestrację na serwerze Eureka. Ta rejestracja zastępuje ustawienie lokalne w application.properties
programie z serwera konfiguracji itd. Jeśli chcesz ustawić ją na false
, możesz ją zastąpić, ustawiając zmienną środowiskową w aplikacji kontenera.
Właściwość jest ustawiona eureka.instance.prefer-ip-address
na true
wartość z powodu określonej reguły rozpoznawania nazw domen w środowisku aplikacji kontenera. Nie modyfikuj tej wartości, aby nie przerywać powiązania.
Opcjonalnie: Usuń powiązanie aplikacji kontenera ze składnika 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ć co najmniej Microsoft.App/managedEnvironments/write
rolę przypisaną do konta w zasobie środowiska zarządzanego. Możesz jawnie przypisać Owner
rolę lub Contributor
dla zasobu. Możesz również wykonać kroki tworzenia niestandardowej definicji roli i przypisywania jej do konta.
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ć
<SUBSCRIPTION_ID>
symbol zastępczy wAssignableScopes
wartości identyfikatorem subskrypcji.Przypisz rolę niestandardową do konta w zasobie środowiska zarządzanego.
Pobierz identyfikator zasobu środowiska zarządzanego:
export ENVIRONMENT_ID=$(az containerapp env show \ --name $ENVIRONMENT --resource-group $RESOURCE_GROUP \ --query id \ --output tsv)
Przypisz rolę do swojego konta.
Przed uruchomieniem tego polecenia zastąp symbole zastępcze oznaczone
<>
nawiasami kwadratowymi identyfikatorem użytkownika lub jednostki usługi i 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.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.
Opcjonalnie: integrowanie serwera Eureka dla składników Spring i Admin for Spring Java
Jeśli chcesz zintegrować serwer Eureka dla platformy Spring i składników Admin for Spring Java, zobacz Integrowanie zarządzanego administratora platformy Spring z serwerem Eureka dla platformy Spring.
Czyszczenie zasobów
Zasoby utworzone w tym samouczku mają wpływ na rachunek za platformę Azure. Jeśli nie zamierzasz korzystać z tych usług w dłuższej perspektywie, 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 bilety pomocy technicznej dla nowych żądań 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:
Nazwa/nazwisko | opis | Domyślna wartość |
---|---|---|
eureka.server.enable-self-preservation |
Po włączeniu serwer śledzi liczbę odnawiań, które powinny zostać odebrane z 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 |
Interwał, z którym próg — jak określono w eureka.server.renewal-percent-threshold temacie — 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 |
Obecnie com.netflix.eureka.registry.ResponseCache do odpowiedzi jest używana strategia buforowania dwóch poziomów. Pamięć podręczna readWrite z zasadami wygasania i pamięcią podręczną readonly , która buforuje się bez wygaśnięcia. |
true |
eureka.server.disable-delta |
Sprawdza, czy informacje różnicowe mogą być obsługiwane klientowi, czy nie. | false |
eureka.server.retention-time-in-m-s-in-delta-queue |
Uzyskaj czas buforowania informacji różnicowych dla klientów w celu pobrania wartości bez ich braku. | 0 |
eureka.server.delta-retention-timer-interval-in-ms |
Uzyskaj interwał czasu, z którym zadanie oczyszczania powinno zostać wznawiane i sprawdź, czy wygasłe informacje różnicowe. | 0 |
eureka.server.eviction-interval-timer-in-ms |
Uzyskaj interwał czasu, z którym zadanie, które wygasa wystąpienia, powinno zostać wznawiane i uruchamiane. | 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 średnią wymuszoną szybkość żą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 klienci standardowi limitu szybkości. Jeśli ustawiono wartość false , tylko standardowi 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
logging.*
przestrzeni nazw powinny być zabronione — na przykład zapisywanie plików dziennika przy użyciulogging.file
polecenia powinno być zabronione.
Wywoływanie między aplikacjami
W tym przykładzie pokazano, jak napisać kod Java w celu wywołania między aplikacjami zarejestrowanymi w składniku Eureka Server for Spring. Gdy aplikacje kontenerów są powiązane z usługą Eureka, komunikują się ze sobą za pośrednictwem serwera Eureka.
W przykładzie są tworzone dwie aplikacje, obiekt wywołujący i wywoływany. Obie aplikacje komunikują się między sobą przy użyciu składnika Eureka Server for Spring. Aplikacja wywoływana uwidacznia punkt końcowy wywoływany przez aplikację wywołującą.
Utwórz aplikację wywoływaną. 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); } }
Utwórz punkt końcowy w aplikacji wywoływanej, która jest wywoływana przez aplikację wywołującą.
@RestController public class CalleeController { @GetMapping("/call") public String calledByCaller() { return "Hello from Application callee!"; } }
Ustaw nazwę aplikacji wywoływanej w pliku konfiguracji aplikacji — na przykład w application.yml.
spring.application.name=callee
Utwórz aplikację wywołującą.
Dodaj adnotację
@EnableDiscoveryClient
, aby włączyć funkcję klienta Eureka. Ponadto utwórz fasolęWebClient.Builder
z adnotacją, aby wykonywać wywołania o zrównoważonym obciążeniu@LoadBalanced
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(); } }
Utwórz kontroler w aplikacji wywołującej, który używa
WebClient.Builder
obiektu do wywoływania aplikacji wywoływanej 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 aplikację wywołującą i wywoływaną, która komunikuje się ze sobą przy użyciu serwera Eureka dla składnikó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-preservation
ustawioną na false
. Ta domyślna konfiguracja pomaga uniknąć czasów, w których wystąpienia nie są usuwane po włączeniu samozachowawczynia. Jeśli wystąpienia są usuwane zbyt wcześnie, niektóre żądania mogą być kierowane do nieistniejących wystąpień. Jeśli chcesz zmienić to ustawienie na true
, możesz go zastąpić, ustawiając własne konfiguracje w składniku Języka Java.
Następne kroki
Powiązana zawartość
Integrowanie zarządzanego administratora platformy Spring z serwerem Eureka dla platformy Spring