simpMessagingTemplate不会将消息从客户端发送到服务器

时间:2017-04-13 07:38:23

标签: java stomp spring-websocket spring-messaging

我想通过2个java应用程序之间的Web套接字交换消息。

我有以下服务器配置:

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {

    @Override
    public void configureMessageBroker(MessageBrokerRegistry registry) {
        registry.setApplicationDestinationPrefixes("/app");
        registry.enableSimpleBroker("/queue", "/topic");
        registry.setUserDestinationPrefix("/user");
    }

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        //todo remove handshake handler when authorization is implemented
        registry.addEndpoint("/ws").setAllowedOrigins("*").setHandshakeHandler(new TestHandshakeHandler()).withSockJS();
    }
}

以及标有@Controller的内部类我写了以下主题:

@MessageMapping("/consumer/client/add")
public void addClientRequest(String msgReq) {
    logger.info(msgReq);
}

和clien内部我连接并且在sime bean中我写了以下内容:

@Autowired
private SimpMessagingTemplate simpMessagingTemplate;
...
simpMessagingTemplate.convertAndSend("/app/consumer/client/add", new StubObject("message"));

但是从客户端发送方法addClientRequest后没有调用。

请提出解决此问题的方法。

其实我不明白问题。也许我发送到错误的目的地,或者我遇到配置问题或路径错误或其他问题。

P.S。

我知道我可以extend StompSessionHandlerAdapter

并从那里获得会话,但看起来它是不好的风格,应该是实现它的另一种方式

P.S.2

内部课程WebSocketTcpConnectionHandlerAdapterWebSocketStompClient内的内部课程)我看到private volatile WebSocketSession session;

我想获取此对象以发送消息

1 个答案:

答案 0 :(得分:0)

我认为它的设计并不像这样。

我认为你必须使用特定的websocket客户端。这个例子如下: http://www.programmingforliving.com/2013/08/jsr-356-java-api-for-websocket-client-api.html

此代码:

@MessageMapping("/consumer/client/add")
public void addClientRequest(String msgReq) {
    logger.info(msgReq);
}

不会连接到websocket客户端并等待发送消息。它希望客户端能够通过它连接并发送消息。