RabbitMQ:n ja Kafkan integrointi
Määrittäkää Spring WebSockets käyttämään ulkoisia viestinvälittäjiä palvelinten väliseen viestintään.
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.StringDeserializerVä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.
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
- Ulkoisten viestinvälittäjien tarve
- RabbitMQ:n ja Kafkan integrointi
- Hajautetut WebSocket-arkkitehtuurit
- STOMP broker relayn määrittäminen