WebSockets en realtime systemen met Spring · Les

Integratie met RabbitMQ/Kafka

Configureer Spring WebSockets voor het gebruik van externe message brokers voor communicatie tussen servers.

Les 2 van 411 stappen

Integratie met RabbitMQ/Kafka is een gratis WebSockets en realtime systemen met Spring-les op CoddyKit. Dit is les 2 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject WebSockets en realtime systemen met Spring. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus WebSockets en realtime systemen met Spring bevat in totaal 4 lessen.

Schalen met externe brokers

Wanneer je WebSocket-toepassing op meerdere serverinstanties draait, is een in-memory berichtenbroker niet voldoende. Je hebt een externe berichtenbroker nodig om berichten tussen alle instanties te coördineren.

Zo kan een bericht dat naar één server wordt verstuurd, worden ontvangen door een client die met *elke* server in je cluster is verbonden, waardoor echte horizontale schaalbaarheid mogelijk wordt.

De brokerbrug van Spring

Spring biedt een krachtige abstractie met de naam STOMP Broker Relay. Hiermee kan je Spring WebSocket-toepassing de routering van berichten overlaten aan een externe STOMP-compatibele berichtenbroker.

Je toepassing fungeert als client van de externe broker en verstuurt en ontvangt namens verbonden WebSocket-clients berichten.

RabbitMQ: een STOMP-broker

RabbitMQ is een populaire open-sourceberichtenbroker die u kunt configureren als STOMP-broker door de STOMP-plug-in in te schakelen. Daarmee is het een uitstekende keuze voor het schalen van Spring WebSocket-toepassingen.

  • Producenten: uw Spring-app stuurt berichten naar RabbitMQ.
  • Consumenten: uw Spring-app ontvangt berichten van RabbitMQ.
  • STOMP-plug-in: vertaalt WebSocket-STOMP-frames naar AMQP en omgekeerd.

RabbitMQ-afhankelijkheid toevoegen

Om Spring met RabbitMQ te laten communiceren, moet u de afhankelijkheden spring-boot-starter-websocket en spring-boot-starter-amqp toevoegen aan het bestand build.gradle of pom.xml van uw project.

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

De RabbitMQ-brokerrelay configureren

Gebruik in uw WebSocketConfig enableStompBrokerRelay() om Spring te laten weten dat het de STOMP-plug-in van RabbitMQ als berichtenbroker moet gebruiken. Vergeet niet de juiste host, poort en aanmeldgegevens in te stellen.

Probeer deze volledige Spring Boot-toepassing uit te voeren:

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 voor synchronisatie tussen servers

Hoewel RabbitMQ als directe STOMP-brokerrelay kan fungeren, wordt Apache Kafka doorgaans gebruikt voor andere soorten communicatie tussen servers in een schaalbare WebSocket-architectuur.

In plaats van Kafka als directe STOMP-broker te gebruiken, kunnen afzonderlijke Spring WebSocket-instanties Kafka gebruiken om interne gebeurtenissen of berichten naar andere instanties in het cluster te verspreiden.

De rol van Kafka in een cluster

Stel dat u meerdere WebSocket-servers hebt. Wanneer er een bericht aankomt bij Server A en de ontvanger verbonden is met Server B, kan Server A het bericht publiceren naar een Kafka-onderwerp.

Server B (en alle andere servers) kan berichten uit dit onderwerp consumeren, het bericht voor zijn client identificeren en het doorsturen. Daarmee is Kafka een uitstekende backend voor gedistribueerde coördinatie van berichten.

Kafka-afhankelijkheid toevoegen

Om Spring met Kafka te laten communiceren voor berichtenuitwisseling in de backend, hebt u de afhankelijkheid spring-kafka nodig.

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

Eigenschappen van de Kafka-toepassing

Wanneer u Kafka gebruikt voor berichtenuitwisseling tussen servers, configureert u de gegevens van de Kafka-broker en de eigenschappen van consumenten en producenten in het bestand application.properties.

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

Controle van de brokerconfiguratie

U stelt een Spring Boot WebSocket-toepassing in die een externe STOMP-compatibele berichtenbroker gebruikt ter ondersteuning van meerdere serverinstanties. Welke methode in WebSocketMessageBrokerConfigurer wordt voornamelijk gebruikt om Spring te configureren voor verbinding met deze externe broker?

Samenvatting: externe brokers

U hebt geleerd hoe belangrijk externe berichtenbrokers zijn voor het schalen van WebSocket-toepassingen. Spring maakt het met enableStompBrokerRelay() eenvoudiger om brokers zoals RabbitMQ te integreren (wanneer de STOMP-plug-in daarvan is ingeschakeld).

Kafka is geen directe STOMP-brokerrelay, maar dient als krachtige backend voor communicatie tussen servers. Zo kunnen WebSocket-instanties berichten in een cluster coördineren en verspreiden, waardoor robuust schalen mogelijk wordt.

Gratis beginnen

Leer WebSockets en realtime systemen met Spring met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
12
Lessen
48

Veelgestelde vragen

Is de les “Integratie met RabbitMQ/Kafka” gratis?

Ja — de volledige tekst van “Integratie met RabbitMQ/Kafka” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus WebSockets en realtime systemen met Spring wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus WebSockets en realtime systemen met Spring bevat in totaal 4 lessen.

Wat leer ik in “Integratie met RabbitMQ/Kafka”?

Configureer Spring WebSockets voor het gebruik van externe message brokers voor communicatie tussen servers. Je oefent met WebSockets en realtime systemen met Spring door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met WebSockets en realtime systemen met Spring te beginnen?

Ervaring vooraf is niet nodig. WebSockets en realtime systemen met Spring op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 2 van 4.

Hoe lang duurt de les “Integratie met RabbitMQ/Kafka”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over WebSockets en realtime systemen met Spring?

Ja. Elke les over WebSockets en realtime systemen met Spring bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. De behoefte aan externe message brokers
  2. Integratie met RabbitMQ/Kafka
  3. Gedistribueerde WebSocket-architecturen
  4. De STOMP broker relay configureren
← Terug naar WebSockets en realtime systemen met Spring