订阅不工作Spring SockJs Stomp

时间:2017-01-17 11:58:46

标签: spring websocket stomp sockjs subscribe

我想使用websocket从服务器发送到客户端的东西.. 这是我的代码:

----服务器上的Websocket配置----

@Configuration
@EnableWebSocketMessageBroker
@Slf4j
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer{

@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
    config.enableSimpleBroker("/topic");
}

@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
    registry.addEndpoint("/myWebSocketEndPoint")
            .withSockJS();
    }
}

----控制器---

@Controller
@Component
@Slf4j
public class MenuItemController{
    @SendTo("/topic/notification")
    public String sendToMenuItems(MenuItemDto menuItem)  {
        return menuItem.getMenuItemName();
    }
}

-----客户-----

var SockJS = require('sockjs-client');
var Stomp = require('stompjs'); 

let connectWebSocket = () => {
  socket = new SockJS(context.backend + '/myWebSocketEndPoint');
  stompClient = Stomp.over(socket);
  stompClient.connect({},function (frame) {
    console.log(frame);
    stompClient.subscribe('/topic/notification', function(menuItem){
        alert(menuItem);
    });
  });
}
connectWebSocket();

我使用context.backend因为我使用webpack,所以websocket通过后端服务器连接。它适用于连接,订阅似乎也有效,但是当我从服务器向客户端发送内容时,警报不会出现,并且在控制台中没有来自websocket的消息。我的问题是什么?我希望有人可以帮助我.. = D

1 个答案:

答案 0 :(得分:1)

存在相关问题:https://github.com/spring-guides/gs-messaging-stomp-websocket/issues/10

使用

stompClient.connect({}, function(frame) {

而不是

stompClient.connect("","",function (frame) {

编辑: 如果您想使用Rest Controller,请使用SimpMessagingTemplate发送消息。

@Autowired
private SimpMessagingTemplate messagingTemplate;

,您的方法将调用

messagingTemplate.convertAndSend("/topic/notification", "test");

如果没有,请务必使用@MessageMapping(value = "/sentToMenu")注释您的sendToMenuItems,并且您有一个正确的stomp客户端发送消息:stompClient.send("/sentToMenu", {}, 'teste');