Mam pewną aplikację napisaną w Springu, która odbiera wiadomości z RabbitMQ. Wszystko działa pięknie i ładnie, aczkolwiek skupmy się na części aplikacji, która rozsyła dane (JSON) na konkretne contexty dla WebSocketów z wykorzystaniem SimpMessagingTemplate. Poniższy kod działa tzn wysyła dane, które odbierane są przez frontend poprzez Stomp.
@Scheduled(fixedDelay = 5000)
public void volumeGraphData() {
Random r = new Random();
Graph graph = new Graph();
graph.setVolume(r.nextInt(500));
String json = gson.toJson(graph);
MessageBuilder<byte[]> messageBuilder = MessageBuilder.withPayload(json.getBytes());
simpMessagingTemplate.send("/" + volumeGraph, messageBuilder.build());
}
Najgorsza część jest taka, że nie mogę połączyć dwóch elementów. Owego brokera w postaci SimpMessagingTemplate oraz Queue Listenera dla RabbitMQ.
public class QueueListener extends AbstractAdaptableMessageListener {
private final Logger logger = Logger.getLogger(getClass().getName());
@Override
public void onMessage(Message message, Channel channel) throws Exception {
}
public void onMessagePayload(Payload payload) {
logger.info("Queue listener");
logger.info(payload.toString());
}
}
Queue listener jest w root context, natomiast moduł do wysyłania danych na Stomp Endpoint w dispatcher-servlet.xml czyli de facto MVC context. Próbowałem z pozycji Queue Listenera wysyłać wiadomości na EventBus od Guavy, ale też nie działa. Przenosiłem beany do jednego wspólnego contextu, ale też nie działa m.in. kontener nie podawał SimpMessagingTemplate. Wiecie co trzeba zrobić ?