【问题标题】:Spring 4 STOMP Websockets - How to realise MultichannelSpring 4 STOMP Websockets - 如何实现多通道
【发布时间】:2014-05-24 13:13:40
【问题描述】:

与最新的 Spring 4 STOMP 和 SockJS 教程一样,我们发现了以下类型的 RequestMapping:

Homecontroller.java

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

现在我尝试通过修改这个requestmapping来实现多通道支持:

@MessageMapping("/hello/{id}")
    @SendTo("/topic/greetings/{id}")
    public Greeting greetingMultichannel(HelloMessage message) throws Exception {
        this.info();
        Thread.sleep(300); // simulated delay
        return new Greeting(" Hello, " + message.getName() + "!");
    }

MessageMapping 不起作用,sendTo 不会返回到指定的 URL。 虽然 我确实订阅了正确的频道,并且消息没有出现问题,如本文所示


调试日志:

正在打开 Web Socket... stomp.js:130 Web Socket 已打开... stomp.js:130

连接 接受版本:1.1,1.0 心跳:10000,10000

stomp.js:130

stomp.js:130 连接到服务器 undefined stomp.js:130 已连接:已连接 版本:1.1 心跳:0,0

(索引):23

订阅 编号:sub-0 目的地:/topic/greetings/1

stomp.js:130

发送 目的地:/app/hello/1 内容长度:18

{"name":"texttext"}


应该有回应,但没有任何回应..

有人可以看到我在这里缺少什么吗?

干杯, 海因里希

【问题讨论】:

    标签: spring websocket stomp


    【解决方案1】:

    目前无法将参数传递给@SendTo/@SendToUser@MessageMapping 上的占位符在@SendTo/@SendToUser 中不可用。有一个open Jira,请留意它。

    同时,使用SimpMessagingTemplate

    @Autowired 
    private SimpMessagingTemplate simpMessagingTemplate;
    
    @MessageMapping("/hello/{id}")
    public void greetingMultichannel(HelloMessage message, @DestinationVariable("id") Long id) throws Exception {
        this.info();
        Thread.sleep(300); // simulated delay
    
        simpMessagingTemplate.convertAndSend("/topic/greetings/" + id, new Greeting(" Hello, " + message.getName() + "!"));
    }
    

    2015 年 9 月 8 日更新:

    从 Spring 4.2 开始,目标变量占位符可以在 @SendTo / @SendToUser 中使用。这现在是可能的:

    @MessageMapping("/hello/{id}")
    @SendTo("/topic/greetings/{id}")
    public Greeting greetingMultichannel(HelloMessage message) throws Exception {
        this.info();
        Thread.sleep(300); // simulated delay
        return new Greeting(" Hello, " + message.getName() + "!");
    }
    

    【讨论】:

      猜你喜欢
      • 2016-12-13
      • 2014-03-17
      • 2017-02-16
      • 2017-12-04
      • 1970-01-01
      • 2018-03-30
      • 1970-01-01
      • 2016-01-28
      • 1970-01-01
      相关资源
      最近更新 更多