Spring websocket end-point e enviar mensagem
-
21-12-2019 - |
Pergunta
Eu tenho um listener JMS e preciso pegar a mensagem, manipulá-la e depois redirecioná-la para uma página usando websocket.
Bom, só estou confuso com a configuração, configurei o 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 isso deve estar correto, então minha página é:
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 a conexão funciona.
Agora, no meu ouvinte jms, tentei enviar uma mensagem desta forma:
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
Mas não funciona.As perguntas são:
- Como enviar uma mensagem?
- Onde devo especificar o ponto final (secondep) ao enviar uma mensagem?
Obrigado!qualquer ajuda é apreciada!
Solução
Mensagem de teste();//<--- tem que enviar a mensagem aqui
Não, não precisa enviar, porque você usa método da mesma classe, mas @SendTo
faz o seu ImporterListener
como procurador e Advice
funcionará no método apenas de outro componente.
Você deve injetar isto:
@Autowired
@Qualifier("brokerMessagingTemplate")
private MessageSendingOperations brokerMessagingTemplate;
E envie uma mensagem usando isso:
brokerMessagingTemplate.convertAndSend("/topic/register", "TestMessage");
Onde devo especificar o ponto final (secondep) ao enviar uma mensagem?
É para o @MessageMapping("/ws/secondep")
em algum método POJO para receber mensagens de clientes.Não é para a parte de envio.