gRPC ja suorituskykyiset API:t · Oppitunti

Konteksti ja määräajat

Hyödynnä kontekstia pyyntöjen elinkaaren hallintaan, määräaikojen valvontaan ja peruutusten hallittuun käsittelyyn.

Oppitunti 3/411 vaihetta

Konteksti ja määräajat on ilmainen gRPC ja suorituskykyiset API:t-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu gRPC ja suorituskykyiset API:t-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. gRPC ja suorituskykyiset API:t-kurssilla on yhteensä 4 oppituntia.

gRPC:n Context selitettynä

gRPC:ssä Context on tehokas objekti, joka kuljettaa pyyntöön sidottuja arvoja API-rajojen yli. Ajattele sitä reppuna, joka kulkee pyynnön mukana ja sisältää tärkeitä tietoja.

Se on olennaisen tärkeä etäproseduurikutsujen elinkaaren hallinnassa.

Pyyntöjen elinkaaren hallinta

Context auttaa hallitsemaan, kuinka kauan toiminnon pitäisi suorittaa ja voidaanko se peruuttaa. Näin asiakkaat eivät joudu odottamaan loputtomasti eivätkä palvelimet tuhlaa resursseja peruutettuihin pyyntöihin.

Se on erityisen hyödyllinen mikropalveluissa, joissa yksi käyttäjän pyyntö voi kattaa useita gRPC-kutsuja.

Kutsujen aikarajojen asettaminen

Yksi Contextin yleisimmistä ja tärkeimmistä käyttötavoista on aikarajojen asettaminen. Aikaraja määrittää enimmäisajan, jonka asiakas on valmis odottamaan gRPC-kutsun valmistumista.

Kun aikaraja umpeutuu, toiminto peruutetaan automaattisesti sekä asiakkaalla että (mieluiten) palvelimella.

Asiakas asettaa, palvelin tarkkailee

Kun asiakas asettaa aikarajan, gRPC liittää nämä tiedot pyynnön Contextiin. Palvelin voi sitten tarkistaa tästä Contextista, onko aikaraja umpeutunut tai onko asiakas peruuttanut pyynnön.

Näin palvelin voi lopettaa käsittelyn aikaisemmin ja säästää resursseja.

Contextin luominen aikarajalla

Voit luoda alikontekstin olemassa olevasta Contextista ja liittää siihen aikarajan. Jos emokonteksti peruutetaan, myös alikonteksti peruutetaan, mutta alikontekstilla on lisäksi oma aikakatkaisunsa.

Seuraavassa on esimerkki kahden sekunnin aikakatkaisun asettamisesta.

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
  }
}

Palvelinpuolen aikarajan tarkistus

Palvelimella voit käyttää nykyisen pyynnön Contextia sen tilan tarkistamiseen. Näin palvelusi voi lopettaa käsittelyn aikaisemmin, jos asiakas ei enää odota vastausta.

Context.current().isCancelled() on keskeinen tapa tarkistaa, onko aikaraja umpeutunut tai onko asiakas peruuttanut pyynnön nimenomaisesti.

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();
    }
  }
}

Contextin automaattinen välitys

Yksi gRPC:n vahvuuksista on, että Context välitetään automaattisesti sisäkkäisten gRPC-kutsujen yli. Jos palvelu A kutsuu palvelua B, palvelun A pyynnön Context (mukaan lukien aikarajat) välitetään palvelun B pyyntöön.

Tämä yksinkertaistaa hajautettujen aikakatkaisujen hallintaa ja varmistaa yhdenmukaisen toiminnan mikropalveluissa.

Peruutusten hallittu käsittely

Kun Context peruutetaan (joko aikarajan umpeutumisen tai nimenomaisen peruutuksen vuoksi), metodi isCancelled() palauttaa arvon true. Palvelukoodisi pitäisi tarkistaa tämä säännöllisesti ja vapauttaa resurssit tai lopettaa käynnissä olevat laskennat.

Tämä estää orpoutuneita tehtäviä ja resurssivuotoja sekä parantaa järjestelmän yleistä reagointikykyä.

Contextin muut käyttötavat

Aikarajat ovat yksi Contextin tärkeimmistä käyttötavoista, mutta se voi kuljettaa myös muita pyyntöön sidottuja tietoja, kuten todennustunnuksia, jäljitystunnuksia tai käyttäjätietoja. Tämä tekee siitä monipuolisen työkalun poikkileikkaaville huolenaiheille.

Pidä Contextin arvot kuitenkin pieninä ja kevyinä, sillä ne kulkevat jokaisen pyynnön mukana.

Contextin ja aikarajojen tietovisa

Tarkastele seuraavaa Java-koodikatkelmaa:

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();
  }
}

Mitä konsoliin tulostetaan?

Kertaus: Context ja aikarajat

Opimme, että Context on olennainen gRPC-pyyntöjen elinkaaren hallinnassa. Sen avulla asiakkaat voivat asettaa aikarajoja, jotka välitetään automaattisesti eteenpäin.

  • Aikarajat: Määrittävät kutsun enimmäisodotusajan.
  • Peruutus: Palvelimet voivat lopettaa työn hallitusti, jos aikaraja ylittyy tai asiakas peruuttaa pyynnön.
  • Välitys: Context kulkee automaattisesti sisäkkäisten gRPC-kutsujen mukana.
  • Hallittu käsittely: Tarkista aina Context.current().isCancelled(), jotta voit reagoida peruutuksiin.

Contextin hallitseminen auttaa rakentamaan vankkoja, tehokkaita ja häiriönsietokykyisiä gRPC-palveluja.

Aloita maksutta

Opi gRPC ja suorituskykyiset API:t tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
12
Oppitunnit
48

Usein kysytyt kysymykset

Onko oppitunti ”Konteksti ja määräajat” ilmainen?

Kyllä – oppitunnin ”Konteksti ja määräajat” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko gRPC ja suorituskykyiset API:t-kurssin, päivitä CoddyKit PROhon. gRPC ja suorituskykyiset API:t-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Konteksti ja määräajat”?

Hyödynnä kontekstia pyyntöjen elinkaaren hallintaan, määräaikojen valvontaan ja peruutusten hallittuun käsittelyyn. Harjoittelet gRPC ja suorituskykyiset API:t-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni gRPC ja suorituskykyiset API:t-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin gRPC ja suorituskykyiset API:t-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.

Kuinka kauan ”Konteksti ja määräajat”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä gRPC ja suorituskykyiset API:t-oppitunnilla?

Kyllä. Jokainen gRPC ja suorituskykyiset API:t-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Tilakoodit ja virheenkäsittely
  2. Mukautettujen metatietojen välitys
  3. Konteksti ja määräajat
  4. Monipuoliset virhemallit google.rpc.Statusilla
← Takaisin: gRPC ja suorituskykyiset API:t