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

Spring 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

与最新的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套接字。。。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() + "!");
}