2014-04-10 34 views
2

正如最新的春季4教程与STOMP和SockJS,我们发现以下类型的RequestMapping我试图通过修改此请求映射来实现多通道支持:春4 STOMP的WebSockets如何实现多通道

@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: 130 web套接字开业... stomp.js:130

CONNECT 接受版本:1.1,1.0 心脏搏动:10000,10000

stomp.js:130 < < <连 心脏搏动:0,0 版本: 1.1

stomp.js:130 连接到服务器未定义stomp.js:130 连接:CONNECTED 版本:1.1 心脏搏动:0,0

(指数):23

订阅 ID:分0 目的地:/主题/问候/ 1

stomp.js:130

SEND 目的地:/应用/你好/ 1 内容长度:18

{ “名称”: “textext”}


有应该是一个回应,但没有回来..

有人可以看到我在这里失踪?

欢呼声, 海因里希

回答

3

目前还没有办法将参数传递给@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() + "!"); 
}