convertAndSend与SendTo注释

时间:2018-11-06 20:35:05

标签: java spring

我有以下代码:

@Controller
@EnableScheduling
public class QuoteController {

    @Scheduled(fixedDelay=5000)
    @SendTo(value="/topic/quote")
    public String sendPrice() {
        return "message from scheduler";
    }
}

并且它不会将消息发送到频道。但是以下代码有效:

@Controller
@EnableScheduling
public class QuoteController {
    @Autowired
    public SimpMessageSendingOperations messagingTemplate;

    @Scheduled(fixedDelay=5000)
    public String sendPrice() {
        messagingTemplate.convertAndSend("/topic/quote", "message from scheduler");
    }
}

1 个答案:

答案 0 :(得分:0)

我们只应在由websocket调用的函数中使用@SendTo批注,这是指用@MessageMapping标注的函数。

如果您想以其他方式发送消息到队列,则应使用messagingTemplate.convertAndSend

@SendTo的示例:

@MessageMapping("/hello") // from websocket
@SendTo("/topic/bla")
public String foo1(String message) {
    return message;
}

.convertAndSend的示例:

@Autowired
private SimpMessagingTemplate template;

@GetMapping("/{msg}") //from GET request
public void foo2(@PathVariable String msg) {
    template.convertAndSend("/topic/bla", msg);
}