Reaaliaikaisen tiedon push-arkkitehtuurit
Suunnitelkaa arkkitehtuureja jatkuvien tietovirtojen ja päivitysten välittämiseen yhdistetyille asiakkaille.
Reaaliaikaisen tiedon push-arkkitehtuurit 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.
Reaaliaikainen tietojen välitys
Modernit sovellukset hyötyvät välittömistä päivityksistä. Ajatelkaa osakekurssien seurantaa, urheilutulossovellusta tai chat-huonetta – kaikissa tiedot on toimitettava niiden tapahtuessa, ei vasta pyynnöstä.
Tässä oppitunnissa tarkastellaan, miten suunnitellaan palvelinpuolen arkkitehtuureja, jotka aktiivisesti välittävät jatkuvia tietovirtoja ja päivityksiä yhdistetyille asiakkaille.
Julkaisija–tilaaja-malli
Tietojen välityksen ytimessä on julkaisija–tilaaja- (Pub/Sub)-malli. Se toimii näin:
- Julkaisijat: Palvelinpuolen komponentteja, jotka luovat ja lähettävät viestejä.
- Tilaajat: Yhdistettyjä asiakkaita, kuten verkkoselaimia ja mobiilisovelluksia, jotka ilmaisevat kiinnostuksensa tietynlaisiin viesteihin.
Järjestelmä toimittaa julkaisijoiden viestit kaikille niistä kiinnostuneille tilaajille ja irrottaa tietolähteen sen kuluttajista.
Palvelinpuolen tietolähteet
Mistä välitettävät tiedot ovat peräisin? Yleisiä lähteitä ovat:
- Tietokannan muutokset: Reaaliaikaiset päivitykset, kun tietokannan tietoja muutetaan.
- Ulkoiset API:t: Kolmannen osapuolen palveluista vastaanotetut tapahtumat tai tiedot.
- Sovelluksen sisäiset tapahtumat: Omassa sovelluksessa tapahtuvat toiminnot, kuten uuden tilauksen tekeminen tai käyttäjän tilan muuttuminen.
- Viestijonot: Järjestelmistä, kuten Kafkasta tai RabbitMQ:sta, kulutetut tiedot.
Välitysarkkitehtuuri toimii siltana: se ottaa tiedot näistä lähteistä ja lähettää ne asiakkaille.
Spring-välityspalvelun esimerkki
Katsotaan yksinkertaista Spring Boot -palvelua, joka simuloi tietojen tuottamista ja välittämistä STOMP-aiheeseen. Käytämme SimpMessagingTemplate-luokkaa, Springin apuvälinettä viestien lähettämiseen välittäjän kohteisiin.
Kokeile suorittaa tämä esimerkki:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
// Main Spring Boot Application
@SpringBootApplication
@EnableScheduling // Enables scheduled tasks like our data push
@EnableWebSocketMessageBroker // Enables STOMP over WebSockets
public class RealTimeApp {
public static void main(String[] args) {
SpringApplication.run(RealTimeApp.class, args);
}
}
// WebSocket Configuration for STOMP
@Configuration
@EnableWebSocketMessageBroker
class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
// Enable a simple in-memory broker for '/topic' and '/user' destinations
config.enableSimpleBroker("/topic", "/user");
// Prefix for messages from clients to server-side @MessageMapping methods
config.setApplicationDestinationPrefixes("/app");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
// Register the '/ws' endpoint for WebSocket handshake
registry.addEndpoint("/ws").withSockJS();
}
}
// Service to push real-time data
@Service
class DataPushService {
private final SimpMessagingTemplate messagingTemplate;
private int counter = 0;
public DataPushService(SimpMessagingTemplate messagingTemplate) {
this.messagingTemplate = messagingTemplate;
}
// This method runs every 3 seconds and pushes data
@Scheduled(fixedRate = 3000)
public void pushTimeUpdate() {
String message = "Current time: " + LocalDateTime.now().format(DateTimeFormatter.ofPattern("HH:mm:ss")) + " (Update " + (++counter) + ")";
// Push to a public topic. Clients can subscribe to '/topic/updates'.
messagingTemplate.convertAndSend("/topic/updates", message);
System.out.println("Pushed to /topic/updates: " + message);
}
}Päivitysten lähettäminen kaikille
Edellisen näkymän esimerkki havainnollistaa yleislähetystä. Kun DataPushService lähettää viestin kohteeseen /topic/updates, se välitetään kaikille kyseisen aiheen tilaajina oleville asiakkaille.
- Tämä sopii erinomaisesti julkisille tietovirroille, kuten chat-huoneille, uutisvirroille ja yleisille ilmoituksille.
- Kyseessä on tehokas fan-out-arkkitehtuuri, jossa yksi palvelimen lähettämä viesti saavuttaa useita asiakkaita samanaikaisesti.
Kohdennettu välitys: aiheet ja käyttäjät
Aiheet sopivat erinomaisesti yleislähetykseen, mutta joskus viesti on lähetettävä tietylle käyttäjälle tai pienelle ryhmälle. STOMP tukee kahta pääasiallista kohdetyyppiä tietojen välittämiseen:
- Aiheet (esim.
/topic/news): Viestien lähettämiseen kaikille tilaajille. - Käyttäjäkohteet (esim.
/user/{userId}/queue/notifications): Yksityisten, käyttäjäkohtaisten viestien lähettämiseen.
Tämän eron ymmärtäminen on ratkaisevan tärkeää joustavien välitysarkkitehtuurien suunnittelussa.
Yksityiset käyttäjäilmoitukset
Kun yksityinen viesti tai ilmoitus halutaan lähettää tietylle käyttäjälle, Springin SimpMessagingTemplate tarjoaa convertAndSendToUser()-metodin.
Tämä metodi reitittää viestin automaattisesti kyseiseen käyttäjätunnukseen liittyvään oikeaan WebSocket-istuntoon tai -istuntoihin.
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.stereotype.Service;
@Service
public class NotificationService {
private final SimpMessagingTemplate messagingTemplate;
public NotificationService(SimpMessagingTemplate messagingTemplate) {
this.messagingTemplate = messagingTemplate;
}
public void sendPrivateNotification(String userId, String message) {
// The client would subscribe to '/user/queue/notifications'
// Spring handles the '/user/{userId}' part automatically.
messagingTemplate.convertAndSendToUser(userId, "/queue/notifications", message);
System.out.println("Sent private notification to " + userId + ": " + message);
}
}Ulkoisten tapahtumien integrointi
Monimutkaisissa, suurivolyymisissa tai hajautetuissa järjestelmissä tietolähteet voivat olla ulkoisia viestinvälittäjiä, kuten Apache Kafka tai RabbitMQ.
Välitysarkkitehtuuriin kuuluisi tällöin:
- Spring-komponentti, joka toimii kuluttajana ja kuuntelee ulkoiselta välittäjältä tulevia viestejä.
- Kun viesti vastaanotetaan, komponentti käyttää
SimpMessagingTemplate-luokkaa tietojen välittämiseen WebSocketien kautta asiaankuuluville asiakkaille.
Tämä malli takaa löyhän kytkennän ja skaalautuvuuden.
Välitysarkkitehtuurien skaalaaminen
Sovelluksen kasvaessa myös tietojen välitysjärjestelmää on skaalattava:
- Vaakasuuntaisen skaalauksen: Suoritetaan useita WebSocket-palvelimen instansseja.
- Ulkoiset viestinvälittäjät: Ne ovat välttämättömiä palvelinten väliseen viestintään vaakasuuntaisesti skaalatussa järjestelmässä. Ne varmistavat, että viestit saavuttavat kaikki asiaankuuluvat asiakkaat riippumatta siitä, mihin palvelininstanssiin ne ovat yhteydessä.
- Kuormantasaajat: Jakavat asiakasyhteydet palvelininstanssien kesken. Yksinkertaisissa toteutuksissa voidaan tarvita istuntojen kiinnitystä samaan palvelimeen, kun taas monimutkaisemmissa toteutuksissa tarvitaan kehittyneempää istuntojen hallintaa.
Arkkitehtuurivisa
Olette rakentamassa reaaliaikaista sovellusta. Käyttäjien on saatava päivityksiä omista tilauksistaan, ja samalla heidän on nähtävä kaikkien äskettäin tekemistä tilauksista koostuva julkinen syöte. Mikä arkkitehtuuriratkaisu sopii parhaiten kumpaankin tilanteeseen?
Kertaus: tietojen välityksen hallinta
Olette nyt tutustuneet reaaliaikaisten tietojen välitysarkkitehtuurien keskeisiin käsitteisiin:
- Julkaisija–tilaaja-malli perustana.
- Erilaisten palvelinpuolen tietolähteiden tunnistaminen.
- Yleislähetyksen toteuttaminen aiheiden kautta sekä yksityisten ilmoitusten toteuttaminen käyttäjäkohteiden avulla Springissä.
- Ulkoisten tapahtumalähteiden roolin ja välitysjärjestelmän skaalausstrategioiden ymmärtäminen.
Näiden tietojen avulla voitte suunnitella vankkoja ja tehokkaita reaaliaikaisia tietojen toimitusratkaisuja mihin tahansa sovellukseen!
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 ”Reaaliaikaisen tiedon push-arkkitehtuurit” ilmainen?
Kyllä – oppitunnin ”Reaaliaikaisen tiedon push-arkkitehtuurit” 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 ”Reaaliaikaisen tiedon push-arkkitehtuurit”?
Suunnitelkaa arkkitehtuureja jatkuvien tietovirtojen ja päivitysten välittämiseen yhdistetyille asiakkaille. 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 ”Reaaliaikaisen tiedon push-arkkitehtuurit”-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
- Server-Sent Events (SSE) vai WebSockets
- Reaaliaikaisen tiedon push-arkkitehtuurit
- Käyttäjäilmoitusten toteuttaminen
- Paikallaolon ja online-tilan seuranta