我有兩個不同的java彈簧應用程序。第一個使用websocket發送消息,它工作正常。java spring websocket從其他應用程序發送回覆
客戶端:
var socket = new SockJS('http://localhost:8080/myapp/hello');
stompClient = Stomp.over(socket);
stompClient.connect({}, function(frame) {
console.log('Connected: ' + frame);
stompClient.subscribe('/topic/greeting', function(greeting){
console.log(greeting.body);
//showGreeting(JSON.parse(greeting.body).content);
});
});
服務器:
@MessageMapping("/send/{widgetId}")
public Greeting userMessage(@DestinationVariable String widgetId,
UserMessageWrapper userMessageWrapper) throws Exception {
dispatchMessage(widgetId, userMessageWrapper.getUserToken(),
userMessageWrapper.getMessage(), userMessageWrapper.getUserAgent());
return new Greeting("asdasdsa");
}
它工作正常,但我需要從其他java應用另一臺服務器上發送到這個消息的答覆。我在那裏有一個石英工作,它掃描數據庫並使用websockets將訂閱響應發送給訂閱的客戶端。我希望每個客戶都只能收到他的消息,而不是廣播。
public void callJSWebSocket(){
SimpMessageHeaderAccessor headerAccessor = SimpMessageHeaderAccessor
.create(SimpMessageType.MESSAGE);
headerAccessor.setSubscriptionId("sub-0");
headerAccessor.setLeaveMutable(true);
messagingTemplate.convertAndSendToUser("user","/topic/greeting",
"asdsadasd1212");
}
和配置在兩種情況下:
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/topic");
config.setApplicationDestinationPrefixes("/ws");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/hello").setAllowedOrigins("*").withSockJS();
}
}
我不明白如何從其他應用程序發送正確的消息。我想我需要檢索並存儲sessionId的某個地方,然後用於回覆。另外,我應該創建配置和控制器來回復,我做錯了什麼?