Spring 4.0.5 で WebSocket を実装しています。クライアント(ブラウザ)はサーバーへの接続を維持します。私のサービス層がバックエンドでいくつかのレコードを更新するとき、特定のトピックをサブスクライブするクライアントに通知したいと思います。
Controller が ApplicationEvent をリッスンし、それを WebSocket クライアントに発行するようにします。これは可能ですか?
サービス層に実装された別のリスナーがあり、イベントをキャプチャできます。コントローラーが ApplicationEvent をリッスンできないというのは本当ですか?
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.stereotype.Controller;
import com.geneoz.service.event.MessageEvent;
@Controller
public class ApplicationEventObservorController implements ApplicationListener<MessageEvent> {
private static Logger logger = Logger.getLogger(ApplicationEventObservorController.class);
private SimpMessagingTemplate template;
@Autowired
public ApplicationEventObservorController(SimpMessagingTemplate template) {
logger.debug("Initialising ApplicationEventObservorController");
this.template = template;
}
@Override
public void onApplicationEvent(MessageEvent event) {
logger.debug("Captured event. " + event);
this.template.convertAndSend("/topic/update", event.toString());
}
}