Kontekst og deadlines
Brug context til at administrere anmodningers livscyklus, håndhæve deadlines og håndtere annullering på en hensynsfuld måde.
Kontekst og deadlines er en gratis gRPC og højtydende API'er-lektion på CoddyKit. Dette er lektion 3 af 4. 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 gRPC og højtydende API'er, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. gRPC og højtydende API'er-kurset indeholder 4 lektioner i alt.
gRPC-Context forklaret
I gRPC er Context et effektivt objekt, der fører værdier, som er afgrænset til en anmodning, på tværs af API-grænser. Tænk på det som en rygsæk, der følger med din anmodning og indeholder vigtige oplysninger.
Det er afgørende til håndtering af RPC-kaldenes livscyklus.
Håndtering af anmodningers livscyklus
Context hjælper dig med at styre, hvor længe en handling skal køre, og om den skal annulleres. Det forhindrer klienter i at vente uendeligt og servere i at spilde ressourcer på annullerede anmodninger.
Det er især nyttigt i mikrotjenester, hvor en enkelt brugeranmodning kan strække sig over flere gRPC-kald.
Håndhævelse af tidsfrister for kald
En af de mest almindelige og vigtigste anvendelser af Context er at angive tidsfrister. En tidsfrist angiver den maksimale tid, en klient er villig til at vente på, at et gRPC-kald fuldføres.
Hvis tidsfristen overskrides, annulleres handlingen automatisk både på klienten og (ideelt set) på serveren.
Klienten angiver, serveren observerer
Når en klient angiver en tidsfrist, knytter gRPC disse oplysninger til anmodningens Context. Serveren kan derefter kontrollere denne Context for at se, om tidsfristen er overskredet, eller om klienten har annulleret anmodningen.
Det giver serveren mulighed for at stoppe behandlingen tidligt og dermed spare ressourcer.
Oprettelse af Context med tidsfrist
Du kan oprette en underordnet Context ud fra en eksisterende og knytte en tidsfrist til den. Det sikrer, at den underordnede Context også annulleres, hvis den overordnede Context annulleres, men den underordnede har også sin egen tidsgrænse.
Sådan kan du angive en tidsgrænse på 2 sekunder.
import io.grpc.Context;
import java.util.concurrent.TimeUnit;
public class DeadlineCreationDemo {
public static void main(String[] args) throws InterruptedException {
// Get the current (or default) context
Context parentContext = Context.current();
// Create a new cancellable context with a 2-second deadline
Context.CancellableContext withDeadline =
parentContext.withDeadlineAfter(2, TimeUnit.SECONDS, null);
System.out.println("Context created with 2s deadline.");
// Simulate some work taking 3 seconds
Thread.sleep(3000);
if (withDeadline.isCancelled()) {
System.out.println("Context cancelled due to deadline!");
} else {
System.out.println("Context still active.");
}
withDeadline.close(); // Important to close cancellable contexts
}
}Kontrol af tidsfrist på serversiden
På serveren kan du tilgå den aktuelle anmodnings Context for at kontrollere dens status. Det giver din tjeneste mulighed for at stoppe behandlingen tidligt, hvis klienten ikke længere venter.
Context.current().isCancelled() er afgørende for at kontrollere, om tidsfristen er overskredet, eller om klienten eksplicit har annulleret.
import io.grpc.Context;
import java.util.concurrent.TimeUnit;
public class ServerCheckDemo {
public static void main(String[] args) throws InterruptedException {
// Simulate a gRPC call's context with a 1-second deadline
Context.CancellableContext cancellableContext =
Context.current().withDeadlineAfter(1, TimeUnit.SECONDS, null);
// In a real gRPC server, you'd get Context.current() directly
// For this demo, we attach it to simulate the server's view
Context oldContext = cancellableContext.attach();
try {
System.out.println("Server started processing...");
// Simulate work taking longer than the deadline
Thread.sleep(1500);
if (Context.current().isCancelled()) {
System.out.println("Processing stopped: Context cancelled (deadline exceeded)!");
// A real server would throw Status.DEADLINE_EXCEEDED.asRuntimeException();
} else {
System.out.println("Processing completed successfully.");
}
} finally {
cancellableContext.detach(oldContext); // Always detach
cancellableContext.close();
}
}
}Automatisk videreførelse af Context
En af gRPC's styrker er, at Context automatisk videreføres på tværs af indlejrede gRPC-kald. Hvis Service A kalder Service B, sendes Context (herunder tidsfrister) fra Service A's anmodning videre til Service B's anmodning.
Det forenkler distribueret håndtering af tidsgrænser og sikrer ensartet adfærd på tværs af dine mikrotjenester.
Hensigtsmæssig håndtering af annullering
Når en Context annulleres (enten på grund af en tidsfrist eller en eksplicit annullering), returnerer metoden isCancelled() true. Din tjenestekode bør jævnligt kontrollere dette og rydde op i ressourcer eller stoppe igangværende beregninger.
Det forhindrer forældreløse opgaver og ressourcelækager og forbedrer systemets overordnede reaktionsevne.
Andre anvendelser af Context
Selvom tidsfrister er en primær anvendelse, kan Context også indeholde andre data, der er afgrænset til en anmodning, f.eks. godkendelsestokens, sporings-ID'er eller brugeroplysninger. Det gør den til et alsidigt værktøj til tværgående funktioner.
Hold dog Context-værdier små og lette, da de følger med hver anmodning.
Quiz om Context og tidsfrister
Se på følgende Java-kodestykke:
import io.grpc.Context;
import java.util.concurrent.TimeUnit;
public class QuizDemo {
public static void main(String[] args) throws InterruptedException {
Context parent = Context.current();
Context.CancellableContext child = parent.withDeadlineAfter(1, TimeUnit.SECONDS, null);
System.out.println("Starting task...");
Thread.sleep(2000); // This line runs for 2 seconds
if (child.isCancelled()) {
System.out.println("Task cancelled!");
} else {
System.out.println("Task completed!");
}
child.close();
}
}Hvad bliver udskrevet i konsollen?
Opsummering: Context og tidsfrister
Vi har lært, at Context er afgørende for håndtering af gRPC-anmodningers livscyklus. Den giver klienter mulighed for at angive tidsfrister, som automatisk videreføres.
- Tidsfrister: Angiver den maksimale ventetid på et kald.
- Annullering: Servere kan standse arbejdet på en hensigtsmæssig måde, hvis en tidsfrist overskrides, eller klienten annullerer.
- Videreførelse: Context følger automatisk med på tværs af indlejrede gRPC-kald.
- Hensigtsmæssig håndtering: Kontrollér altid
Context.current().isCancelled()for at reagere på annulleringer.
Når du mestrer Context, kan du bygge robuste, effektive og modstandsdygtige gRPC-tjenester.
Lær gRPC og højtydende API'er 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
- 12
- Lektioner
- 48
Ofte stillede spørgsmål
Er lektionen “Kontekst og deadlines” gratis?
Ja — hele teksten til “Kontekst og deadlines” 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 gRPC og højtydende API'er-kurset, skal du opgradere til CoddyKit PRO. gRPC og højtydende API'er-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Kontekst og deadlines”?
Brug context til at administrere anmodningers livscyklus, håndhæve deadlines og håndtere annullering på en hensynsfuld måde. Du øver dig i gRPC og højtydende 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å gRPC og højtydende API'er?
Der kræves ingen tidligere erfaring. gRPC og højtydende 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 3 af 4.
Hvor lang tid tager lektionen “Kontekst og deadlines”?
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 gRPC og højtydende API'er-lektion?
Ja. Alle gRPC og højtydende 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
- Statuskoder og fejlhåndtering
- Overførsel af brugerdefinerede metadata
- Kontekst og deadlines
- Avancerede fejlmodeller med google.rpc.Status