0Pricing
WebSockets & Real-Time Systems with Spring · Aula

Mensagens direcionadas a usuários específicos

Envie mensagens privadas e individuais por STOMP usando destinos de usuário, @SendToUser e SimpMessagingTemplate.convertAndSendToUser.

Mensagens direcionadas a usuários específicos é uma aula grátis de WebSockets & Real-Time Systems with Spring no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de WebSockets & Real-Time Systems with Spring, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de WebSockets & Real-Time Systems with Spring inclui 4 aulas no total.

Partes desta aula ainda não foram traduzidas e aparecem em inglês.

Beyond Broadcasts

So far messages went to a /topic that every subscriber receives. Real apps also need private messages: a chat whisper, a personal notification, an order update for one customer.

User Destinations

Spring supports the /user destination prefix. When a client subscribes to /user/queue/notifications, Spring rewrites it to a unique, per-session queue so only that user gets the message.

Where the Principal Comes From

Targeted messaging needs to know who a session is. The Principal attached during the handshake (from Spring Security or a custom handshake handler) provides the username key.

Sending with @SendToUser

In a controller method you annotate with @SendToUser. The return value is delivered only to the user who sent the triggering message.

@MessageMapping("/private")
@SendToUser("/queue/reply")
public Note handle(Note in, Principal principal) {
  return new Note("Hi " + principal.getName());
}

The Client Subscription

The client subscribes to the /user-prefixed destination. Spring resolves it to that client's private queue automatically.

stompClient.subscribe('/user/queue/reply', (msg) => {
  console.log('Private:', JSON.parse(msg.body));
});

Pushing from Anywhere with the Template

Outside a controller (e.g. from a service or scheduled job) use SimpMessagingTemplate.convertAndSendToUser to reach a specific user by name.

messagingTemplate.convertAndSendToUser(
  "alice", "/queue/notifications", new Alert("Payment received"));

How Resolution Works

The UserDestinationMessageHandler maps /user/{username}/queue/x to the actual session-specific destination. You address users by name; Spring finds their active sessions.

Multiple Sessions per User

One user may be connected from a phone and a laptop. convertAndSendToUser delivers to all of that user's active sessions, so notifications appear everywhere they are logged in.

Targeting a Single Session

To reach just one device, pass headers selecting a specific simpSessionId rather than broadcasting to every session of the user.

SimpMessageHeaderAccessor h = SimpMessageHeaderAccessor.create(SimpMessageType.MESSAGE);
h.setSessionId(sessionId);
h.setLeaveMutable(true);
messagingTemplate.convertAndSendToUser(user, "/queue/reply", body, h.getMessageHeaders());

User Destinations Across a Cluster

With a single server the simple broker resolves user destinations in-memory. Across multiple nodes you need an external broker (RabbitMQ) plus a UserRegistry broadcast so a node can route to a user connected elsewhere.

Security Note

Never let a client choose another user's destination. Always derive the target from the authenticated Principal, not from client-supplied data, to prevent message hijacking.

Quick Check

Test your knowledge of per-user messaging.

Recap

You delivered private messages:

  • The /user prefix maps to per-session queues
  • @SendToUser replies to the originating user
  • convertAndSendToUser pushes to a named user from anywhere
  • Multiple sessions per user are reached together; target one with session headers
  • Always derive the target from the authenticated Principal

Perguntas Frequentes

A aula “Mensagens direcionadas a usuários específicos” é grátis?

Sim — o texto completo de “Mensagens direcionadas a usuários específicos” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de WebSockets & Real-Time Systems with Spring, atualize para CoddyKit PRO. O curso de WebSockets & Real-Time Systems with Spring inclui 4 aulas no total.

O que vou aprender em “Mensagens direcionadas a usuários específicos”?

Envie mensagens privadas e individuais por STOMP usando destinos de usuário, @SendToUser e SimpMessagingTemplate.convertAndSendToUser. Você pratica WebSockets & Real-Time Systems with Spring com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar WebSockets & Real-Time Systems with Spring?

Nenhuma experiência prévia é necessária. WebSockets & Real-Time Systems with Spring no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.

Quanto tempo leva a aula “Mensagens direcionadas a usuários específicos”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de WebSockets & Real-Time Systems with Spring?

Sim. Cada aula de WebSockets & Real-Time Systems with Spring inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Intercetores WebSocket
  2. Personalização de conversores de mensagens
  3. Gestão de sessões de utilizador
  4. Mensagens direcionadas a usuários específicos
← Voltar para WebSockets & Real-Time Systems with Spring