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:

  1. Como enviar uma mensagem?
  2. Onde devo especificar o ponto final (secondep) ao enviar uma mensagem?

Obrigado!qualquer ajuda é apreciada!

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top