Spring 4 STOMP Websockets-如何实现多通道



在使用STOMP和SockJS的最新Spring 4教程中,我们发现了以下类型的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() + "!");
    }

现在我试图通过修改这个请求映射来实现多通道支持:

@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套接字。。。stomp.js:130Web套接字已打开。。。stomp.js:130

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

stomp.js:130<lt<已连接心跳:0,0版本:1.1

stomp.js:130连接到服务器未定义的stomp.js:130已连接:已连接版本:1.1心跳:0,0

(索引):23

认购id:sub-0目的地:/t主题/问候/1

stomp.js:130

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

{"name":"textext"}


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

有人能看到我在这里缺了什么吗?

欢呼,Heinrich

当前无法将参数传递给@SendTo/@SendToUser@MessageMapping上的占位符在@SendTo/@SendToUser中不可用。对此有一个开放的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() + "!");
}

相关内容

  • 没有找到相关文章

最新更新