java - 在每个 http 请求上向客户端发送 stomp 消息

标签 java spring spring-boot websocket stomp

我有一个 spring boot 服务器和一个客户端,它们使用 STOMP 通过 Websockets 连接。

我的用例是,每次向特定端点发出 http 请求时,我都想向客户端发送数据。 我找到的所有教程都只展示了这种情况,即客户端将一些数据发送到“/hello”,而服务器通过将数据发送到“topic/greetings”来使用react:

@MessageMapping("/hello")
@SendTo("/topic/greetings")
public Greeting greeting(HelloMessage message) throws Exception {
    Thread.sleep(1000); // simulated delay
    return new Greeting("Hello, " + HtmlUtils.htmlEscape(message.getName()) + "!");
}

我需要的是一个无需消息映射即可发送数据的 Controller 方法。每次有人对端点执行获取请求时,它应该只向客户端发送数据。我尝试了以下方法,但没有用:

@Autowired
private SimpMessagingTemplate msgTemplate;

@SendTo("topic/data-received")
@RequestMapping(value = "/send-data", method = RequestMethod.POST)
public String sendData(@RequestHeader(value = "id") String id,
                               @RequestHeader(value = "data") String data) {

    User user = new User();
    user.id = UUID.fromString(id);
    user.stringData = data;
    database.saveStringData(user);
    msgTemplate.convertAndSend("topic/data-received", "data sent!!");
    return "successful";
}

这是我的客户端代码:

function connect() {
var socket = new SockJS('/clipboard-websocket');
var stompClient = Stomp.over(socket);
stompClient.connect({}, function (frame) {
    console.log('Connected: ' + frame);
    stompClient.subscribe('topic/data-received/', function (message) {
        alert("Data received!!");
    });
}

这是我的 WebSocket 配置:

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

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

最佳答案

目标中缺少尾部斜杠

msgTemplate.convertAndSend("/topic/data-received", "data sent!!");

enter image description here

github-repo-issue-54498776

关于java - 在每个 http 请求上向客户端发送 stomp 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54498776/

相关文章:

java - Spring Security 重新创建 HttpSession

java - 将 SecurityContextHolder.setContext(...) 设置为模拟,即使使用 @DirtiesContext 也会传递到不同的测试类

java - 如何在 Rest Api 调用中设置多个响应类型

java - Spring数据查询非常慢

java - 向 ArrayList<Integer> 实例添加值只能按顺序完成

java - 如何将数据从服务器(REST api 响应)推送/发送到 jsp/html 表单

java - Spring 双向转换器

java - 运行Java应用程序

java - Spring安全.DaoAuthenticationProvider : Cannot resolve reference to bean

java - spring boot tomcat jsp 已下载未呈现