У меня есть компонент-контроллер с таким методом, как
@MessageMapping("${my.topic}")
public void receiveCommand(Message content) {
log.info("Received command: " + content);
}
И я также вводю SimpMessagingTemplate
и JmsMessagingTemplate
в этот контроллер.Я считаю, что проблема с моим receiveCommand
методом заключается в том, что Spring ожидает, что это будет сообщение JMS, а не сообщение WebSocket.Однако это кажется невозможным для определения, как я могу убедиться, что этот метод соответствует теме WebSocket, а не очереди JMS?
Мое приложение помечено @EnableJms
и @EnableWebSocket
и хорошо работает для получения JMSсообщения и отправка сообщений WebSocket через STOMP, но, похоже, не может получать сообщения WebSocket.
Импорт сообщений на моем контроллере выполняется следующим образом.
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.messaging.Message;
import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.stereotype.Component;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
У меня также есть другойметод, который использует JmsListener, который работает, поэтому мне интересно, если это каким-то образом подхватывается Spring на classpath и переопределяет MessageMapping, чтобы быть именем очереди JMS.
@JmsListener(destination = "${my.destination}")
public void receiveMessage(String content) {
System.out.println("Jms message: " + content);
}
Я не вижу никаких следов стекаили ошибки при запуске модульного теста, который выглядит следующим образом:
@Autowired
private SimpMessagingTemplate websocket;
@Value("${my.topic}")
private String topic;
@Test
public void shouldReceiveCommandMessages() throws IOException {
URL url = Resources.getResource("command.json");
String json = Resources.toString(url, Charsets.UTF_8);
this.websocket.convertAndSend(topic, json);
}
, который находится в пределах большего SpringBootTest
, который работает для проверки отправки и получения Jms.