Spring 4 STOMP Websockets-如何实现多通道
与最新的Spring 4教程中的STOMP和SockJS一样,我们发现了以下类型的RequestMapping: Homecontroller.javaSpring 4 STOMP Websockets-如何实现多通道,spring,websocket,stomp,Spring,Websocket,Stomp,与最新的Spring 4教程中的STOMP和SockJS一样,我们发现了以下类型的RequestMapping: Homecontroller.java @MessageMapping("/hello") @SendTo("/topic/greetings") public Greeting greeting(HelloMessage message) throws Exception { Thread.sleep(3000); // simulated dela
@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套接字。。。stomp.js:130 Web套接字已打开。。。stomp.js:130 连接 接受版本:1.1,1.0 心跳:1000010000 stomp.js:130
目前无法将参数传递到
@SendTo
/@SendToUser
,因此@MessageMapping
上的占位符在@SendToUser
中不可用。这有一个好办法,注意一下
同时,使用SimpMessageTemplate
:
@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() + "!");
}
目前无法将参数传递到
@SendTo
/@SendToUser
,因此@MessageMapping
上的占位符在@SendToUser
中不可用。这有一个好办法,注意一下
同时,使用SimpMessageTemplate
:
@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() + "!");
}