반응형
봄 부팅 웹 소켓에서 특정 사용자에게 알림 보내기
특정 고객에게 알림을 보내고 싶습니다.
예: 사용자 이름 사용자
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfiguration extends
AbstractWebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry stompEndpointRegistry) {
stompEndpointRegistry.addEndpoint("/socket")
.setAllowedOrigins("*")
.withSockJS();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.enableSimpleBroker("/topic", "/queue");
registry.setApplicationDestinationPrefixes("/app");
}
컨트롤러
@GetMapping("/notify")
public String getNotification(Principal principal) {
String username = "user";
notifications.increment();
logger.info("counter" + notifications.getCount() + "" + principal.getName());
// logger.info("usersend:"+sha.getUser().getName()) ; //user
template.convertAndSendToUser(principal.getName(), "queue/notification", notifications);
return "Notifications successfully sent to Angular !";
}
클라이언트 측
각도 서비스
connect() {
let socket = new SockJs(`api/socket`);
let stompClient = Stomp.over(socket);
return stompClient;
}
각도 성분
let stompClient = this.webSocketService.connect();
stompClient.connect({}, frame => {
stompClient.subscribe('/user/queue/notification', notifications => {
console.log('test'+notifications)
this.notifications = JSON.parse(notifications.body).count;
}) });
저는 다른 많은 질문들을 검색하고 시도해 보았지만, 어떤 것도 저를 위해 작동하지 않았습니다. 예를 들어 Thanh Nguyen Van이 대답했고 여기 있습니다.
콘솔
Opening Web Socket...
stomp.js:134 Web Socket Opened...
stomp.js:134 >>> CONNECT
accept-version:1.1,1.0
heart-beat:10000,10000
stomp.js:134 <<< CONNECTED
version:1.1
heart-beat:0,0
stomp.js:134 connected to server undefined
reminder.component.ts:18 test callsed
stomp.js:134 >>> SUBSCRIBE
id:sub-0
destination:/user/queue/notification
잘 부탁드립니다.
Spring Websocket에서 특정 사용자에게 메시지를 보내는 것에 대한 Gerrytan의 답변은 웹 소켓 구성 변경을 언급합니다. 이 변경 사항은 다음과 같습니다./user
접두어당신의 경우, 제 생각에 그것은 대체하는 것을 의미하는 것 같습니다.
registry.enableSimpleBroker("/topic", "/queue");
와 함께
registry.enableSimpleBroker("/topic", "/queue", "/user");
그는 또한 컨트롤러에서 필요하지 않다고 말합니다./user
자동으로 추가되므로 접두사를 사용합니다.그래서 당신은 이것을 시도할 수 있습니다.
template.convertAndSendToUser(principal.getName(), "/queue/notification", notifications);
그리고 이것은:
template.convertAndSendToUser(principal.getName(), "/user/queue/notification", notifications);
클라이언트 측에서는 서버에 연결하는 데 사용한 사용자 이름을 제공해야 합니다.직접 삽입할 수 있습니다.
stompClient.subscribe('/user/naila/queue/notification', ...)
머리글에서 가져올 수도 있습니다.그러나 Markus는 구체적인 사용자에게 웹 소켓 메시지를 보내는 방법에 대해 말합니다.여기서도 사용자 이름이 필요하지 않으므로 다음과 같이 작동할 수 있습니다.
stompClient.subscribe('/user/queue/notification', ...)
대상에 슬래시가 없는 것 같습니다.
template.convertAndSendToUser(principal.getName(), "/queue/notification", notifications);
언급URL : https://stackoverflow.com/questions/49748468/send-notification-to-specific-user-in-spring-boot-websocket
반응형
'programing' 카테고리의 다른 글
통계: Python의 조합 (0) | 2023.07.21 |
---|---|
ExecutorService 'applicationTaskExecuter' 종료 중 (0) | 2023.07.21 |
이미 생성된 가상 환경에서 파이썬 경로를 어떻게 설정합니까? (0) | 2023.07.21 |
Panda "동일하게 레이블이 지정된 DataFrame 개체만 비교할 수 있습니다" 오류 (0) | 2023.07.21 |
엔티티 데이터 모델 마법사가 Oracle 연결을 사용하여 충돌 (0) | 2023.07.21 |