STOMP:调用用@MessageMapping 注释的方法不向订阅用户发送消息
STOMP: Calling a method annotated with @MessageMapping not sending message to subscribed users
遵循了有关 websockets 的教程 (https://www.baeldung.com/websockets-spring),这在我的计算机上本地有效。
我的问题是直接使用端点 (/send) 调用该方法不会向所有订阅用户发送消息,只有当 stompclient 直接与 @MessageMapping 对话时才会发送消息。
@MessageMapping("/liveoffers")
@SendTo("/topic/messages")
public OutputMessage send(final Message message) throws Exception {
final String time = new SimpleDateFormat("HH:mm").format(new Date());
return new OutputMessage(message.getFrom(), message.getText(), time);
}
@GetMapping(value = "/send")
@ResponseStatus(HttpStatus.OK)
public void invokeSend() throws Exception {
send(new Message("from", "text"));
}
我是否可以用下面类似的方式调用@MessageMapping,但实际上它能正常工作?
您是否考虑过使用 SimpMessagingTemplate 发送消息而不是调用映射方法?
@Autowired
SimpMessagingTemplate template;
@GetMapping(value = "/send")
@ResponseStatus(HttpStatus.OK)
public void invokeSend() throws Exception {
template.convertAndSend("/topic/messages", new Message("from", "text"));
}
遵循了有关 websockets 的教程 (https://www.baeldung.com/websockets-spring),这在我的计算机上本地有效。
我的问题是直接使用端点 (/send) 调用该方法不会向所有订阅用户发送消息,只有当 stompclient 直接与 @MessageMapping 对话时才会发送消息。
@MessageMapping("/liveoffers")
@SendTo("/topic/messages")
public OutputMessage send(final Message message) throws Exception {
final String time = new SimpleDateFormat("HH:mm").format(new Date());
return new OutputMessage(message.getFrom(), message.getText(), time);
}
@GetMapping(value = "/send")
@ResponseStatus(HttpStatus.OK)
public void invokeSend() throws Exception {
send(new Message("from", "text"));
}
我是否可以用下面类似的方式调用@MessageMapping,但实际上它能正常工作?
您是否考虑过使用 SimpMessagingTemplate 发送消息而不是调用映射方法?
@Autowired
SimpMessagingTemplate template;
@GetMapping(value = "/send")
@ResponseStatus(HttpStatus.OK)
public void invokeSend() throws Exception {
template.convertAndSend("/topic/messages", new Message("from", "text"));
}