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

RabbitMQ:n ja Kafkan integrointi

Määrittäkää Spring WebSockets käyttämään ulkoisia viestinvälittäjiä palvelinten väliseen viestintään.

Oppitunti 2/411 vaihetta

RabbitMQ:n ja Kafkan integrointi 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.

Skaalaaminen ulkoisten viestinvälittäjien avulla

Kun WebSocket-sovellus toimii useissa palvelininstansseissa, muistinsisäinen viestinvälittäjä ei riitä. Tarvitsette ulkoisen viestinvälittäjän koordinoimaan viestejä kaikkien instanssien välillä.

Näin yhdelle palvelimelle lähetetyn viestin voi vastaanottaa asiakas, joka on yhteydessä *mihin tahansa* klusterinne palvelimeen, mikä mahdollistaa todellisen horisontaalisen skaalautuvuuden.

Springin viestinvälittäjäsilta

Spring tarjoaa tehokkaan abstraktion nimeltä STOMP Broker Relay. Sen avulla Spring WebSocket -sovellus voi siirtää viestien reitityksen ulkoiselle STOMP-yhteensopivalle viestinvälittäjälle.

Sovellus toimii ulkoisen viestinvälittäjän asiakkaana ja lähettää ja vastaanottaa viestejä yhdistettyjen WebSocket-asiakkaiden puolesta.

RabbitMQ: STOMP-viestinvälittäjä

RabbitMQ on suosittu avoimen lähdekoodin viestinvälitin, joka voidaan määrittää toimimaan STOMP-välittimenä ottamalla sen STOMP-laajennus käyttöön. Tämä tekee siitä erinomaisen vaihtoehdon Spring WebSocket -sovellusten skaalaamiseen.

  • Tuottajat: Spring-sovelluksesi lähettää viestejä RabbitMQ:lle.
  • Kuluttajat: Spring-sovelluksesi vastaanottaa viestejä RabbitMQ:lta.
  • STOMP-laajennus: Muuntaa WebSocketin STOMP-kehykset AMQP-muotoon ja päinvastoin.

Lisää RabbitMQ-riippuvuus

Jotta Spring voi viestiä RabbitMQ:n kanssa, sinun on lisättävä spring-boot-starter-websocket- ja spring-boot-starter-amqp-riippuvuudet projektisi build.gradle- tai pom.xml-tiedostoon.

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-websocket'
    implementation 'org.springframework.boot:spring-boot-starter-amqp'
    // ... other dependencies
}

Määritä RabbitMQ-välityspalvelimen välitys

Käytä WebSocketConfig-määrityksessä enableStompBrokerRelay()-metodia ilmoittaaksesi Springille, että viestinvälittimenä käytetään RabbitMQ:n STOMP-laajennusta. Muista määrittää oikea palvelin, portti ja tunnistetiedot.

Kokeile suorittaa tämä kokonainen Spring Boot -sovellus:

package com.coddykit.websocket;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;

@SpringBootApplication
public class Main {
    public static void main(String[] args) {
        SpringApplication.run(Main.class, args);
        System.out.println("Spring Boot WebSocket app with RabbitMQ broker relay started.");
        System.out.println("Ensure RabbitMQ with STOMP plugin is running on localhost:61613.");
    }

    @Configuration
    @EnableWebSocketMessageBroker
    static class WebSocketConfig implements WebSocketMessageBrokerConfigurer {

        @Override
        public void configureMessageBroker(MessageBrokerRegistry config) {
            config.enableStompBrokerRelay("/topic", "/queue")
                  .setRelayHost("localhost") // Or your RabbitMQ host
                  .setRelayPort(61613) // Default STOMP port for RabbitMQ plugin
                  .setClientLogin("guest")
                  .setClientPasscode("guest");
            config.setApplicationDestinationPrefixes("/app");
            config.setUserDestinationPrefix("/user");
        }

        @Override
        public void registerStompEndpoints(StompEndpointRegistry registry) {
            registry.addEndpoint("/ws").withSockJS();
        }
    }
}

Kafka palvelinten väliseen synkronointiin

RabbitMQ voi toimia suoraan STOMP-välittimenä, mutta Apache Kafkaa käytetään yleensä muunlaiseen palvelinten väliseen viestintään skaalautuvassa WebSocket-arkkitehtuurissa.

Sen sijaan että Kafka toimisi suorana STOMP-välittimenä, yksittäiset Spring WebSocket -instanssit voivat käyttää Kafkaa sisäisten tapahtumien tai viestien välittämiseen muille klusterin instansseille.

Kafkan rooli klusterissa

Kuvitellaan, että käytössäsi on useita WebSocket-palvelimia. Kun viesti saapuu palvelimelle A ja vastaanottaja on yhteydessä palvelimeen B, palvelin A voi julkaista viestin Kafka-aiheeseen.

Palvelin B ja kaikki muut palvelimet voivat kuluttaa viestejä tästä aiheesta, tunnistaa omalle asiakkaalleen tarkoitetun viestin ja välittää sen eteenpäin. Tämä tekee Kafkasta erinomaisen taustajärjestelmän hajautettuun viestien koordinointiin.

Lisää Kafka-riippuvuus

Jotta Spring voi käyttää Kafkaa taustajärjestelmän viestintään, tarvitset spring-kafka-riippuvuuden.

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-websocket'
    implementation 'org.springframework.kafka:spring-kafka'
    // ... other dependencies
}

Kafkan sovellusominaisuudet

Kun käytät Kafkaa palvelinten väliseen viestintään, määrität Kafka-välittimen tiedot sekä kuluttajan ja tuottajan ominaisuudet application.properties-tiedostossa.

spring.kafka.bootstrap-servers=localhost:9092
spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer
spring.kafka.consumer.group-id=websocket-cluster
spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer
spring.kafka.consumer.value-deserializer=org.apache.kafka.common.serialization.StringDeserializer

Välittimen määrityksen tarkistus

Olet määrittämässä Spring Boot WebSocket -sovellusta käyttämään ulkoista STOMP-yhteensopivaa viestinvälitintä useiden palvelininstanssien tukemiseksi. Mitä WebSocketMessageBrokerConfigurer-metodia käytetään ensisijaisesti määrittämään Spring muodostamaan yhteys tähän ulkoiseen välittimeen?

Kertaus: ulkoiset viestinvälittimet

Olemme oppineet, että ulkoiset viestinvälittimet ovat välttämättömiä WebSocket-sovellusten skaalaamisessa. Springin enableStompBrokerRelay() helpottaa RabbitMQ:n kaltaisten välittimien integrointia, kun RabbitMQ:n STOMP-laajennus on otettu käyttöön.

Kafka ei toimi suorana STOMP-välittimenä, mutta se on tehokas taustajärjestelmä palvelinten väliseen viestintään. Sen avulla WebSocket-instanssit voivat koordinoida ja jakaa viestejä klusterissa, mikä mahdollistaa tehokkaan skaalauksen.

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 ”RabbitMQ:n ja Kafkan integrointi” ilmainen?

Kyllä – oppitunnin ”RabbitMQ:n ja Kafkan integrointi” 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 ”RabbitMQ:n ja Kafkan integrointi”?

Määrittäkää Spring WebSockets käyttämään ulkoisia viestinvälittäjiä palvelinten väliseen viestintään. 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 ”RabbitMQ:n ja Kafkan integrointi”-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. Ulkoisten viestinvälittäjien tarve
  2. RabbitMQ:n ja Kafkan integrointi
  3. Hajautetut WebSocket-arkkitehtuurit
  4. STOMP broker relayn määrittäminen
← Takaisin: WebSockets ja reaaliaikaiset järjestelmät Springillä