Grundlæggende kommunikation mellem tjenester
Udforsk synkrone kommunikationsmønstre som REST-kald mellem mikrotjenester.
Grundlæggende kommunikation mellem tjenester er en gratis Spring Boot 4-mikrotjenester og REST-API'er-lektion på CoddyKit. Dette er lektion 2 af 3. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Spring Boot 4-mikrotjenester og REST-API'er, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Spring Boot 4-mikrotjenester og REST-API'er-kurset indeholder 3 lektioner i alt.
Kommunikation mellem tjenester
Mikrotjenester er små, uafhængige tjenester. For at de kan arbejde sammen, skal de kommunikere! Forestil dig, at en Order Service har brug for produktoplysninger fra en Product Service.
I denne lektion undersøger vi, hvordan tjenester kommunikerer med hinanden. Vi fokuserer på synkron kommunikation, hvor én tjeneste venter på et svar fra en anden.
Synkron eller asynkron?
Kommunikation mellem tjenester kan være:
- Synkron: Den kaldende tjeneste sender en forespørgsel og venter på et svar, før den fortsætter sin egen opgave. Tænk på et telefonopkald.
- Asynkron: Den kaldende tjeneste sender en forespørgsel og venter ikke på et øjeblikkeligt svar. Den fortsætter sit arbejde. Tænk på at sende en e-mail.
I dag ser vi nærmere på synkron kommunikation, som ofte udføres ved hjælp af REST API'er.
REST-baserede tjenestekald
REST (Representational State Transfer) er en populær arkitekturstil til webtjenester. Den er også velegnet til kommunikation mellem mikrotjenester.
Tjenester eksponerer endepunkter, og andre tjenester bruger dem ved hjælp af standardiserede HTTP-metoder som GET, POST, PUT og DELETE.
Det svarer til, at én tjeneste fungerer som klient og en anden som server, ligesom din browser kommunikerer med et websted.
Sådan opretter tjenester forbindelse
Når Service A har brug for data fra Service B, fungerer Service A som en HTTP-klient. Den opbygger en HTTP-forespørgsel (metode, URL, headere, brødtekst) og sender den til Service B.
Service B fungerer som en HTTP-server, behandler forespørgslen og sender et HTTP-svar tilbage (statuskode, headere, brødtekst).
Dette er et grundlæggende mønster i mikrotjenestearkitekturer.
Eksempel på vores måltjeneste
Som demonstration kan vi forestille os en simpel "Product Service", som vores "Order Service" kalder. Denne tjeneste har både GET- og POST-endepunkter.
Dette kodestykke viser en grundlæggende Spring Boot-controller til vores Product Service, som kører på port 8081. Den simulerer hentning og oprettelse af produkter.
package com.example.productservice;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
@SpringBootApplication
@RestController
public class ProductServiceApplication {
public static void main(String[] args) {
SpringApplication.run(ProductServiceApplication.class, args);
}
@GetMapping("/products/{id}")
public String getProductInfo(@PathVariable String id) {
return "Product " + id + " Details (from Product Service)";
}
@PostMapping("/products")
public String createProduct(@RequestBody Map<String, String> productData) {
String name = productData.getOrDefault("name", "Unknown");
String price = productData.getOrDefault("price", "0.00");
return "Created Product: " + name + " with price " + price + " (via Product Service)";
}
}Kald med RestTemplate (GET)
Spring's RestTemplate er en synkron klient til at sende HTTP-forespørgsler. Det er en klassisk måde at kalde andre REST-tjenester på.
Sådan kan vores "Order Service" bruge RestTemplate til at hente produktoplysninger fra vores Product Service:
package com.example.orderservice;
import org.springframework.web.client.RestTemplate;
public class OrderServiceCaller {
public static void main(String[] args) {
RestTemplate restTemplate = new RestTemplate();
String productId = "123";
String url = "http://localhost:8081/products/" + productId; // Product Service URL
System.out.println("Calling Product Service for ID: " + productId);
try {
String result = restTemplate.getForObject(url, String.class);
System.out.println("Received: " + result);
} catch (Exception e) {
System.out.println("Error calling Product Service: " + e.getMessage());
}
}
}Behandling af svaret
Når RestTemplate foretager et kald, forventer den et svar. Metoden getForObject() konverterer automatisk svarbrødteksten til den angivne Java-type (her String.class).
Hvis du har brug for mere kontrol, kan du bruge getForEntity(), som returnerer et ResponseEntity-objekt. Det giver dig adgang til:
- Statuskode: F.eks. 200 OK, 404 Not Found.
- Headere: F.eks. Content-Type.
- Brødtekst: De faktiske data.
Afsendelse af data med POST
Ofte har tjenester brug for at sende data til hinanden, ikke kun anmode om dem. Det er her, POST-forespørgsler kommer ind i billedet.
RestTemplate indeholder metoder som postForObject() og postForEntity() til at sende data i forespørgslens brødtekst.
Lad os se, hvordan vores "Order Service" kan oprette et nyt produkt:
package com.example.orderservice;
import org.springframework.web.client.RestTemplate;
import java.util.HashMap;
import java.util.Map;
public class OrderServicePostCaller {
public static void main(String[] args) {
RestTemplate restTemplate = new RestTemplate();
String url = "http://localhost:8081/products"; // Product Service POST URL
// Data to send in the request body
Map<String, String> productData = new HashMap<>();
productData.put("name", "New Gadget");
productData.put("price", "99.99");
System.out.println("Calling Product Service to create product...");
try {
// postForObject sends data and expects a response object
String result = restTemplate.postForObject(url, productData, String.class);
System.out.println("Received: " + result);
} catch (Exception e) {
System.out.println("Error calling Product Service POST: " + e.getMessage());
}
}
}Håndtering af kommunikationsfejl
Hvad sker der, hvis måltjenesten er nede eller sender en fejl?
RestTemplate kaster undtagelser for bestemte HTTP-statuskoder (f.eks. 4xx-klientfejl og 5xx-serverfejl) eller ved forbindelsesproblemer.
Det er afgørende at omslutte dine tjenestekald med try-catch-blokke, så disse fejl håndteres på en hensigtsmæssig måde. Du kan logge fejlen, returnere en standardværdi eller informere brugeren.
I senere lektioner gennemgår vi mere avancerede modstandsdygtighedsmønstre som Circuit Breakers.
Hurtig kontrol: Kommunikation
Forestil dig en mikrotjenestearkitektur, hvor en OrderService skal hente lagerstatus i realtid fra en WarehouseService, før en ordre bekræftes.
Opsummering: Kommunikation mellem tjenester
I denne lektion udforskede vi det grundlæggende i synkron kommunikation mellem tjenester i en mikrotjenestearkitektur.
- Vi lærte, at tjenester ofte kommunikerer ved hjælp af REST API'er og standardiserede HTTP-metoder.
RestTemplateer et effektivt Spring Boot-værktøj til at foretage disse synkrone kald.- Det er vigtigt at håndtere svar og fejl på en hensigtsmæssig måde.
Nu ser vi nærmere på mere avancerede kommunikationsmønstre!
Lær Java med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 24
- Lektioner
- 93
Ofte stillede spørgsmål
Er lektionen “Grundlæggende kommunikation mellem tjenester” gratis?
Ja — hele teksten til “Grundlæggende kommunikation mellem tjenester” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Spring Boot 4-mikrotjenester og REST-API'er-kurset, skal du opgradere til CoddyKit PRO. Spring Boot 4-mikrotjenester og REST-API'er-kurset indeholder 3 lektioner i alt.
Hvad lærer jeg i “Grundlæggende kommunikation mellem tjenester”?
Udforsk synkrone kommunikationsmønstre som REST-kald mellem mikrotjenester. Du øver dig i Spring Boot 4-mikrotjenester og REST-API'er med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Spring Boot 4-mikrotjenester og REST-API'er?
Der kræves ingen tidligere erfaring. Spring Boot 4-mikrotjenester og REST-API'er på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 3.
Hvor lang tid tager lektionen “Grundlæggende kommunikation mellem tjenester”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Spring Boot 4-mikrotjenester og REST-API'er-lektion?
Ja. Alle Spring Boot 4-mikrotjenester og REST-API'er-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Opdeling af monolitter i mikrotjenester
- Grundlæggende kommunikation mellem tjenester
- Overblik over eventdrevne arkitekturer