WebSockets ja reaaliaikaiset järjestelmät Springillä · Oppitunti

WebSocket-yhteyksien valvonta

Toteuttakaa valvontaratkaisuja aktiivisten yhteyksien, viestimäärien ja palvelimen tilan seuraamiseen.

Oppitunti 2/411 vaihetta

WebSocket-yhteyksien valvonta on ilmainen WebSockets ja reaaliaikaiset järjestelmät Springillä-oppitunti CoddyKitissä. Tämä on oppitunti 2/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 WebSockets ja reaaliaikaiset järjestelmät Springillä-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. WebSockets ja reaaliaikaiset järjestelmät Springillä-kurssilla on yhteensä 4 oppituntia.

Miksi WebSocketeja valvotaan?

WebSocketeilla toteutetut reaaliaikaiset sovellukset tarvitsevat jatkuvaa huomiota, jotta ne toimivat sujuvasti. Toisin kuin perinteinen HTTP, WebSocketit ylläpitävät pysyviä yhteyksiä, joten niiden kunto on kriittinen.

Valvonta auttaa ymmärtämään suorituskykyä, tunnistamaan pullonkauloja ja reagoimaan ongelmiin nopeasti, ennen kuin ne vaikuttavat käyttäjiin. Se on luotettavien reaaliaikaisten käyttökokemusten perusta.

WebSocketien keskeiset mittarit

Kun valvotte WebSocketeja, keskittykää seuraaviin keskeisiin osa-alueisiin:

  • Aktiiviset yhteydet: Kuinka monta asiakasta on parhaillaan yhteydessä?
  • Viestimäärät: Kuinka monta viestiä sekunnissa lähetetään tai vastaanotetaan?
  • Virheprosentit: Kuinka usein yhteydet epäonnistuvat tai viesteissä ilmenee virheitä?
  • Viive: Kuinka nopeasti viestit käsitellään ja toimitetaan?

Näiden seuraaminen antaa selkeän kuvan sovelluksen tilasta.

Perusvalvonta Actuatorilla

Spring Boot Actuator tarjoaa tuotantokäyttöön soveltuvia ominaisuuksia sovelluksen valvontaan ja hallintaan. Se tarjoaa useita päätepisteitä, jotka antavat tietoa sovelluksen tilasta, mittareista ja ympäristöstä.

Vaikka Actuator ei ole erityisesti WebSocketeja varten, sen avulla voidaan tarkastella yleisiä JVM-mittareita, HTTP-pyyntöjen mittareita ja sovelluksen yleistä tilaa. Nämä ovat minkä tahansa valvontaratkaisun perusta.

Actuatorin metrics-päätepiste

Aloittakaa lisäämällä Actuator-riippuvuus tiedostoon pom.xml. Sen jälkeen voitte käyttää esimerkiksi päätepisteitä /actuator/health ja /actuator/metrics.

Päätepiste /actuator/metrics luettelee käytettävissä olevat mittarit, mukaan lukien joitakin säiepooliin tai verkkoliikenteeseen liittyviä mittareita, jotka voivat epäsuorasti kuvata WebSocket-kuormaa.

<!-- pom.xml snippet -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

Micrometer mukautettuja mittareita varten

WebSocket-kohtaisiin mittareihin käytämme Micrometeria, Spring Bootin mittaristoabstraktiota. Sen avulla voitte lisätä koodiin mukautettuja laskureita, mittareita, ajastimia ja muita instrumentointeja, jotka voidaan sitten viedä erilaisiin valvontajärjestelmiin.

Micrometer tarjoaa yhtenäisen rajapinnan, joten voitte valita valvonnan taustajärjestelmänne (kuten Prometheuksen tai Grafanan) muuttamatta koodia.

Aktiivisten WebSocket-istuntojen laskeminen

Aktiivisten WebSocket-yhteyksien seuraamiseen voimme käyttää AtomicInteger-tyyppiä istuntojen laskemiseen. Micrometerin Gauge voi sitten tuoda tämän arvon näkyviin.

Gauge sopii erinomaisesti arvoille, jotka vaihtelevat, kuten parhaillaan yhteydessä olevien asiakkaiden määrälle. Todellisessa sovelluksessa päivittäisitte tätä laskuria yhteyden muodostamisen ja katkaisemisen yhteydessä.

import io.micrometer.core.instrument.Gauge;
import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
import java.util.concurrent.atomic.AtomicInteger;

public class SessionCounterDemo {
    private final AtomicInteger activeSessions = new AtomicInteger(0);
    private final MeterRegistry meterRegistry;

    public SessionCounterDemo(MeterRegistry registry) {
        this.meterRegistry = registry;
        Gauge.builder("websocket.active.sessions", activeSessions, AtomicInteger::get)
             .description("Number of active WebSocket sessions")
             .register(meterRegistry);
    }

    public void connect() {
        activeSessions.incrementAndGet();
    }

    public void disconnect() {
        activeSessions.decrementAndGet();
    }

    public static void main(String[] args) {
        MeterRegistry registry = new SimpleMeterRegistry();
        SessionCounterDemo demo = new SessionCounterDemo(registry);

        System.out.println("Initial sessions: " + demo.activeSessions.get());
        demo.connect();
        demo.connect();
        System.out.println("After 2 connects: " + demo.activeSessions.get());
        demo.disconnect();
        System.out.println("After 1 disconnect: " + demo.activeSessions.get());
    }
}

Viestimäärien seuraaminen

Yhteyksien lisäksi viestimäärien seuraaminen on tärkeää. Voimme käyttää Micrometerin Counter-laskuria ja kasvattaa sitä aina, kun viesti lähetetään tai vastaanotetaan.

Counter on yksiarvoinen mittari, joka voi vain kasvaa. Se sopii erinomaisesti tapahtumien, kuten käsiteltyjen viestien, käsiteltyjen pyyntöjen tai ilmenneiden virheiden laskemiseen.

import io.micrometer.core.instrument.Counter;
import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.core.instrument.simple.SimpleMeterRegistry;

public class MessageCounterDemo {
    private final Counter messagesReceived;

    public MessageCounterDemo(MeterRegistry registry) {
        this.messagesReceived = Counter.builder("websocket.messages.received")
                                        .description("Number of WebSocket messages received")
                                        .register(registry);
    }

    public void onMessageReceived(String message) {
        messagesReceived.increment();
        System.out.println("Received message: " + message);
    }

    public static void main(String[] args) {
        MeterRegistry registry = new SimpleMeterRegistry();
        MessageCounterDemo demo = new MessageCounterDemo(registry);

        System.out.println("Initial messages: " + demo.messagesReceived.count());
        demo.onMessageReceived("Hello");
        demo.onMessageReceived("World");
        System.out.println("Total messages: " + demo.messagesReceived.count());
    }
}

WebSocket-virheiden kerääminen

Virheitä voi ilmetä eri vaiheissa: yhteyden kättelyssä, viestien jäsentämisessä tai liiketoimintalogiikassa. Niiden seuraaminen on välttämätöntä sovelluksen vakauden ylläpitämiseksi.

Voitte käyttää Counter-laskuria tietyn virhetyypin seuraamiseen ja lisätä tarvittaessa tunnisteita erottamaan yhteysvirheet, viestimuotovirheet ja palvelimen käsittelyvirheet toisistaan.

import io.micrometer.core.instrument.Counter;
import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.core.instrument.simple.SimpleMeterRegistry;

public class ErrorCounterDemo {
    private final Counter connectionErrors;
    private final Counter messageProcessingErrors;

    public ErrorCounterDemo(MeterRegistry registry) {
        this.connectionErrors = Counter.builder("websocket.errors.total")
                                       .tag("type", "connection")
                                       .description("Total connection errors")
                                       .register(registry);
        this.messageProcessingErrors = Counter.builder("websocket.errors.total")
                                              .tag("type", "message_processing")
                                              .description("Total message processing errors")
                                              .register(registry);
    }

    public void simulateConnectionError() {
        connectionErrors.increment();
        System.out.println("Connection error occurred.");
    }

    public void simulateMessageProcessingError() {
        messageProcessingErrors.increment();
        System.out.println("Message processing error occurred.");
    }

    public static void main(String[] args) {
        MeterRegistry registry = new SimpleMeterRegistry();
        ErrorCounterDemo demo = new ErrorCounterDemo(registry);

        System.out.println("Initial connection errors: " + demo.connectionErrors.count());
        demo.simulateConnectionError();
        System.out.println("Connection errors after one: " + demo.connectionErrors.count());
        demo.simulateMessageProcessingError();
        System.out.println("Message processing errors: " + demo.messageProcessingErrors.count());
    }
}

Mittareiden vieminen koontinäyttöihin

Kun olette lisänneet sovellukseen instrumentoinnin Micrometerilla, mittarit voidaan viedä erilaisiin valvontajärjestelmiin, kuten Prometheukseen, Grafanaan, Datadogiin tai New Reliciin.

Näiden järjestelmien avulla voitte rakentaa tehokkaita koontinäyttöjä WebSocket-mittareiden reaaliaikaiseen visualisointiin. Näin voitte havaita trendejä, määrittää hälytyksiä ja selvittää ongelmia tehokkaasti.

Micrometer-mittareiden tarkistus

Haluatte seurata chat-sovelluksen aktiivisten käyttäjien määrää. Mikä Micrometer-mittarityyppi sopii tähän tarkoitukseen parhaiten?

Valvonnan kertaus

Hienoa! Opitte, miksi WebSocket-sovellusten valvonta on tärkeää ja miten se toteutetaan.

  • Tutustuimme WebSocketien keskeisiin mittareihin, kuten aktiivisiin yhteyksiin ja viestimääriin.
  • Näitte, miten Spring Boot Actuator tarjoaa perustason tilantarkistukset.
  • Käytimme Micrometeria mukautettujen Gauge- ja Counter-mittareiden luomiseen WebSocket-istunnoille ja viesteille.

Seuraavaksi tutustukaa Prometheuksen ja Grafanan kaltaisiin työkaluihin, jotta voitte visualisoida nämä mittarit ja rakentaa tehokkaita koontinäyttöjä!

Aloita maksutta

Opi WebSockets ja reaaliaikaiset järjestelmät Springillä 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 ”WebSocket-yhteyksien valvonta” ilmainen?

Kyllä – oppitunnin ”WebSocket-yhteyksien valvonta” 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 WebSockets ja reaaliaikaiset järjestelmät Springillä-kurssin, päivitä CoddyKit PROhon. WebSockets ja reaaliaikaiset järjestelmät Springillä-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”WebSocket-yhteyksien valvonta”?

Toteuttakaa valvontaratkaisuja aktiivisten yhteyksien, viestimäärien ja palvelimen tilan seuraamiseen. Harjoittelet WebSockets ja reaaliaikaiset järjestelmät Springillä-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni WebSockets ja reaaliaikaiset järjestelmät Springillä-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin WebSockets ja reaaliaikaiset järjestelmät Springillä-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.

Kuinka kauan ”WebSocket-yhteyksien valvonta”-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ä WebSockets ja reaaliaikaiset järjestelmät Springillä-oppitunnilla?

Kyllä. Jokainen WebSockets ja reaaliaikaiset järjestelmät Springillä-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. WebSocket-suorituskyvyn vertailumittaus
  2. WebSocket-yhteyksien valvonta
  3. Spring WebSocket -asetusten hienosäätö
  4. Kaistan säästäminen viestien pakkauksella
← Takaisin: WebSockets ja reaaliaikaiset järjestelmät Springillä