我有以下情况:每次触发事件时,我需要在websocket上发送一条消息。
MessageController.java
在事件处理程序中调用控制器的
@Controller
public class MessageController {
@Autowired
private SimpMessagingTemplate template;
@RequestMapping(path="/messages", method=POST)
public void send(String message) {
this.template.convertAndSend("/topic/messages", message);
}
}
KafkaConsumeEventHandler.java
@Component
public class KafkaConsumeEventHandler implements ApplicationListener<KafkaConsumeEvent> {
private static final Logger LOGGER = LoggerFactory.getLogger(KafkaConsumeEventHandler.class);
public void onApplicationEvent(final KafkaConsumeEvent event) {
LOGGER.info("event detected: publishing...");
LOGGER.info("message to be published: {}",event.getMessage());
//INVOKE CONTROLLER TO SEND MESSAGE HERE
LOGGER.info("event published to websocket.");
}
}
在事件处理程序中调用控制器的
send()
方法是否可能?有更好的方法吗?
编辑
如果我在事件处理程序中执行this.template.convertAndSend("/topic/messages", message);
(自动装配SimMessagingTemplate),会得到一个nullPointerException。