Pregunta

Tengo una JMS oyente, y tengo que llevar el mensaje, manipular y, a continuación, redirigir a una página con websocket.

Bueno, solo estoy confundido acerca de la configuración, he configurado el 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();
    }

Y este debe ser correcto, Entonces mi página web es:

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);     
        });

Y la conexión funciona.

Ahora En mi jms escucha traté de enviar un mensaje de esta manera:

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

Pero no funciona.Las preguntas son:

  1. Cómo enviar un mensaje?
  2. ¿Dónde tengo que especificar el punto final (secondep) al enviar un mensaje?

Gracias!cualquier ayuda es muy apreciada.

¿Fue útil?

Solución

TestMessage();//<--- tienen que enviar el mensaje aquí

No, No tiene no enviar, porque utiliza el método de la misma clase, pero @SendTo hace que su ImporterListener como proxy y Advice trabajará en el método sólo desde otro componente.

Se debe inyectar este:

@Autowired
@Qualifier("brokerMessagingTemplate")
private MessageSendingOperations brokerMessagingTemplate;

Y enviar un mensaje con que:

brokerMessagingTemplate.convertAndSend("/topic/register", "TestMessage");

¿Dónde tengo que especificar el punto final (secondep) al enviar un mensaje?

Es para el @MessageMapping("/ws/secondep") en algunos POJO método de recibir el mensaje de los clientes.No es para el envío de parte.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top