Riktade meddelanden till specifika användare
Skicka privata användarspecifika meddelanden över STOMP med user destinations, @SendToUser och SimpMessagingTemplate.convertAndSendToUser.
Riktade meddelanden till specifika användare är en gratis lektion i WebSockets och realtidssystem med Spring på CoddyKit. Detta är lektion 4 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för WebSockets och realtidssystem med Spring, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i WebSockets och realtidssystem med Spring innehåller totalt 4 lektioner.
Bortom utsändningar
Hittills har meddelanden gått till ett /topic som alla prenumeranter tar emot. Verkliga appar behöver också privata meddelanden: en viskning i en chatt, en personlig avisering eller en orderuppdatering för en kund.
Användardestinationer
Spring stöder destinationsprefixet /user. När en klient prenumererar på /user/queue/notifications skriver Spring om det till en unik kö per session, så att endast den användaren får meddelandet.
Varifrån Principal kommer
Målinriktad meddelandehantering måste veta vem en session tillhör. Principal som kopplas till under handskakningen (från Spring Security eller en anpassad handskakningshanterare) tillhandahåller användarnamnet.
Skicka med @SendToUser
I en controller-metod använder ni annoteringen @SendToUser. Returvärdet levereras endast till användaren som skickade det utlösande meddelandet.
@MessageMapping("/private")
@SendToUser("/queue/reply")
public Note handle(Note in, Principal principal) {
return new Note("Hi " + principal.getName());
}Klientens prenumeration
Klienten prenumererar på destinationen med prefixet /user. Spring löser automatiskt upp den till klientens privata kö.
stompClient.subscribe('/user/queue/reply', (msg) => {
console.log('Private:', JSON.parse(msg.body));
});Skicka från valfri plats med templaten
Utanför en controller, till exempel från en tjänst eller ett schemalagt jobb, använder ni SimpMessagingTemplate.convertAndSendToUser för att nå en specifik användare med namn.
messagingTemplate.convertAndSendToUser(
"alice", "/queue/notifications", new Alert("Payment received"));Så fungerar upplösningen
UserDestinationMessageHandler mappar /user/{username}/queue/x till den faktiska sessionsspecifika destinationen. Ni adresserar användare med namn; Spring hittar deras aktiva sessioner.
Flera sessioner per användare
En användare kan vara ansluten från både en telefon och en laptop. convertAndSendToUser levererar till alla aktiva sessioner för användaren, så att aviseringar visas överallt där användaren är inloggad.
Rikta in sig på en enskild session
Om ni endast vill nå en enhet skickar ni rubriker som väljer ett specifikt simpSessionId i stället för att sända till användarens alla sessioner.
SimpMessageHeaderAccessor h = SimpMessageHeaderAccessor.create(SimpMessageType.MESSAGE);
h.setSessionId(sessionId);
h.setLeaveMutable(true);
messagingTemplate.convertAndSendToUser(user, "/queue/reply", body, h.getMessageHeaders());Användardestinationer i ett kluster
Med en enda server löser den enkla brokern upp användardestinationer i minnet. Över flera noder behöver ni en extern broker (RabbitMQ) samt en UserRegistry-utsändning, så att en nod kan dirigera till en användare som är ansluten någon annanstans.
Säkerhetsanmärkning
Låt aldrig en klient välja en annan användares destination. Härled alltid målet från den autentiserade Principal i stället för från klientinskickade data, så att meddelandekapning förhindras.
Snabb kontroll
Testa era kunskaper om meddelanden per användare.
Sammanfattning
Ni levererade privata meddelanden:
- Prefixet
/usermappar till köer per session @SendToUsersvarar den användare som startade kommunikationenconvertAndSendToUserskickar till en namngiven användare från valfri plats- Flera sessioner per användare nås tillsammans; rikta in er på en session med sessionsrubriker
- Härled alltid målet från den autentiserade
Principal
Lär dig WebSockets och realtidssystem med Spring med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 12
- Lektioner
- 48
Vanliga frågor
Är lektionen ”Riktade meddelanden till specifika användare” gratis?
Ja – hela texten till ”Riktade meddelanden till specifika användare” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i WebSockets och realtidssystem med Spring, kan Ni uppgradera till CoddyKit PRO. Kursen i WebSockets och realtidssystem med Spring innehåller totalt 4 lektioner.
Vad lär jag mig i ”Riktade meddelanden till specifika användare”?
Skicka privata användarspecifika meddelanden över STOMP med user destinations, @SendToUser och SimpMessagingTemplate.convertAndSendToUser. Ni övar på WebSockets och realtidssystem med Spring med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig WebSockets och realtidssystem med Spring?
Du behöver inga förkunskaper. Utbildningen i WebSockets och realtidssystem med Spring på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.
Hur lång tid tar lektionen ”Riktade meddelanden till specifika användare”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här WebSockets och realtidssystem med Spring-lektionen?
Ja. Varje WebSockets och realtidssystem med Spring-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- WebSocket-interceptorer
- Anpassning av meddelandekonverterare
- Hantering av användarsessioner
- Riktade meddelanden till specifika användare