Я использую Spring MVC, ActiveMQ и WebSocket (через sock.js
и stomp.js
) для создания приложения для передачи данных в реальном времени.Push Message от ActiveMQ to Spring Controller
Как известно, когда производитель (другое приложение для настольных компьютеров) нажимает сообщение на ActiveMQ, и метод onMessage()
поймает его.
public class MessageReceiver implements MessageListener {
public void onMessage(Message message) {
System.out.println(message);
// How to push the message to a Controller in Spring?
}
}
Большинство учебных пособий просто печатают сообщение на консоль.
У меня есть еще один контроллер под названием WebSocketController
:
@Controller
public class WebSocketController {
@SubscribeMapping("/getRealTimeResult.action/{submissionId}")
public Message getRealTimeResultAction(
@DestinationVariable long submissionId) {
return new Message("Message content from onMessage() method");
}
}
Я хочу, чтобы подтолкнуть сообщение, полученное в onMessage()
метода к методу getRealTimeResultAction()
. Можете ли вы рассказать мне, как это сделать?
Я знаю, что ActiveMQ может связываться с браузером с помощью stomp
через порт 61613
.
Я не хочу этого делать, потому что я думаю, что MQ должен быть прозрачным для пользователя. Также мне нужно сделать некоторую авторизацию в WebSocketController
.
Прежде всего, веб-клиент нажимает на ActiveMQ сообщение (с уникальным идентификатором). Затем внутренний JMS-клиент (не в Spring MVC) получил сообщение и нажимал больше сообщений на ActiveMQ (асинхронно). Таким образом, функция 'onMessage()' в Spring MVC будет вызвана. И теперь я хочу нажать сообщение на контроллер Spring. Что мне делать? –
Являются ли @Controller и MessageReceiver в одном JVM? Если это так, вы можете использовать какой-либо механизм уведомления (например, Spring SpringContext). Или, в зависимости от того, что вы хотите сделать, они могут делиться какой-то структурой данных. –
Да, они находятся в одном и том же веб-проекте. Spring ApplicationContext не может быть хорошим выбором. Любая элегантная реализация? –