Spring WebSocket End-Poind e invia un messaggio
-
21-12-2019 - |
Domanda
Ho un listener JMS e devo prendere il messaggio, manipolarlo e quindi reindirizzarlo a una pagina usando il WebSocket.
Bene, sono solo confuso sulla configurazione, ho configurato il WebSocketConfig:
@Configuration
@EnableWebSocketMessageBroker
@EnableScheduling
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/topic", "/queue");
config.setApplicationDestinationPrefixes("/app");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/ws/firstep/").withSockJS();
registry.addEndpoint("/ws/secondep/").withSockJS();
}
.
E questo dovrebbe essere corretto, la mia pagina web è:
var socket = new SockJS("/myapp-web/api/ws/secondep/",undefined,options);
var stompClient = Stomp.over(socket);
stompClient.connect({
company : "xxx"
}, function(frame) {
console.log('Connected: ' + frame);
stompClient.subscribe('/topic/register', function(message){
console.log('message: ' + message);
});
stompClient.subscribe('/topic/update', function(message){
console.log('message: ' + message);
});
.
e la connessione funziona.
Ora sul mio ascoltatore JMS Ho provato a inviare un messaggio in questo modo:
public class ImporterListener implements MessageListener {
Logger logger = LoggerFactory.getLogger(ImporterListner.class);
@SendTo("/topic/register")
private String TestMessage() {
return "TestMessage";
}
@Override
public void onMessage(Message message) {
logger.info("Request on message");
if (message instanceof MapMessage) {
MapMessage t = (MapMessage) message;
TestMessage(); //<--- have to send the message here
.
Ma non funziona. Le domande sono:
- .
- Come inviare un messaggio?
- Dove devo specificare il punto finale (secondep) quando invio un messaggio?
Grazie!Qualsiasi aiuto è apprezzato!
Soluzione
.TestMessage ();// <--- Devi inviare il messaggio qui
No, non ha da inviare, perché si utilizza il metodo dalla stessa classe, ma @SendTo
semplifica il ImporterListener
come proxy e Advice
funzionerà sul metodo solo da un altro componente.
Dovresti iniettare questo:
@Autowired
@Qualifier("brokerMessagingTemplate")
private MessageSendingOperations brokerMessagingTemplate;
.
e invia un messaggio usando quello:
brokerMessagingTemplate.convertAndSend("/topic/register", "TestMessage");
.
.Dove devo specificare il punto finale (secondep) quando invii un messaggio?
È per il @MessageMapping("/ws/secondep")
su un metodo POJO per ricevere il messaggio dai clienti.Non è per la parte di invio.