스프링 메시징을 사용하여 내 webapp의 기록 된 사용자에 대한 실시간 알림 시스템을 만들고 싶습니다. 문서에 따르면,외부 메시지 브로커를 사용하여 브로커 중계
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/notifications").withSockJS()
.setSessionCookieNeeded(true)
.setWebSocketEnabled(true);
}
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.enableSimpleBroker("/topic/", "/queue/");
}
을 그리고 :
나는 다음과 같이AbstractWebSocketMessageBrokerConfigurer
을 정의
응용 프로그램이 특정 사용자를 대상으로 메시지를 보낼 수 있습니다. Spring의 STOMP 지원은 접두어가 "/ user /"인 대상을 인식합니다. 예를 들어 클라이언트는 "/ user/queue/position-updates"대상에 가입 할 수 있습니다. 이 목적지는 UserDestinationMessageHandler에 의해 처리되고 사용자 세션에 고유 한 목적지로 변환됩니다. "/ queue/position-updates-user123". 이는 일반적으로 명명 된 대상에 가입하는 편리함을 제공함과 동시에 동일한 대상에 가입하는 다른 사용자와의 충돌을 방지하여 각 사용자가 고유 한 주식 위치 업데이트를 수신 할 수있게합니다.
"/ user/{username}/queue/position-updates"와 같은 대상으로 메시지를 보낼 수 있으며이 대상은 UserDestinationMessageHandler에 의해 각각 하나씩 하나 이상의 대상으로 변환됩니다 사용자와 관련된 세션. 이를 통해 응용 프로그램 내의 모든 구성 요소는 이름과 일반 목적지 이외의 것을 모르는 채로 특정 사용자를 대상으로 메시지를 보낼 수 있습니다. 이는 메시징 템플릿뿐 아니라 주석을 통해 지원됩니다.
/user/{username}/queue/something
에게 메시지를 보내면 {username}
으로 식별되는 특정 사용자에게만 배달됩니다.
, 나는 나 사용할 수있는 솔루션을 찾고있어 외부 메시지 브로커 (RabbitMQ, 예를 들어), 봄과 단지 중개 릴레이 등 :
registry.enableStompBrokerRelay("/topic/", "/queue/");
후 봄에 외부 메시지 브로커를 구성 :
- 그것은 메스에 메시지를 보낼 수 sage Broker 채널을
/user/{username/}/queue/something
으로 사용 하시겠습니까? 그렇다면 어떻게? /user/{username/}/queue/something
채널을 사용하여 Message Broker에서 메시지를 보내면 Spring은 현재Principal
에 따라 해당 메시지를{username}
으로 보낼 수 있습니까?