Question

I have an JMS listener, and I have to take the message, manipulate it and then redirect it to an page using websocket.

Well, I’m just confused about the configuration, I have configured the 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();
    }

And this it should be correct, Then my webpage is:

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

And the connection works.

Now On my jms listener I tried to send a message in this way:

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

But it doesn’t work. The questions are:

  1. How to send a message?
  2. Where do I have to specify the end point (secondep) when I send a message?

Thank you! any help is appreciated!

Was it helpful?

Solution

TestMessage(); //<--- have to send the message here

No, it has't to send, because you use method from the same class, but @SendTo makes your ImporterListener as proxy and Advice will work on method only from another component.

You should inject this:

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

And send a message using that:

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

Where do I have to specify the end point (secondep) when I send a message?

It is for the @MessageMapping("/ws/secondep") on some POJO method to receive message from clients. It isn't for the sending part.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top