我想通过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
后没有调用。
请提出解决此问题的方法。
其实我不明白问题。也许我发送到错误的目的地,或者我遇到配置问题或路径错误或其他问题。
我知道我可以extend StompSessionHandlerAdapter
并从那里获得会话,但看起来它是不好的风格,应该是实现它的另一种方式
内部课程WebSocketTcpConnectionHandlerAdapter
(WebSocketStompClient
内的内部课程)我看到private volatile WebSocketSession session;
我想获取此对象以发送消息
答案 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客户端并等待发送消息。它希望客户端能够通过它连接并发送消息。