通过WebSocket尝试使用Spring for JMS,控制器出现问题

时间:2015-12-22 13:35:56

标签: java spring websocket hornetq stomp

我尝试实现这个示例https://spring.io/guides/gs/messaging-stomp-websocket/,一切正常。所以我向前迈进,试图让它与独立的HornetQ一起工作。 所以,我在HornetQ config中定义了一个主题 - / topic / requests

以下是我所做的更改

  1. 在index.html中我摆脱了sockJS

    function connect() {
    var ws = 'ws://127.0.0.1:61613/stomp';
    stompClient = Stomp.client(ws);  
    stompClient.connect("guest", "guest", function(frame) {
        setConnected(true);
        console.log('Connected: ' + frame);
        stompClient.subscribe('jms.topic.requests', function(greeting){
                showGreeting(JSON.parse(greeting.body).content);
            });
        });
    }
    
  2. 从浏览器发送消息

       function sendName() {
           var name = document.getElementById('name').value;
           stompClient.send("jms.topic.requests", {}, JSON.stringify({ 'name': name }));
       }
    

    ShowGreeting

       function showGreeting(message) {
            var response = document.getElementById('response');
            console.log('response: ' + response);
            var p = document.createElement('p');
            p.style.wordWrap = 'break-word';
            p.appendChild(document.createTextNode(message));
            response.appendChild(p);
        }
    
    1. 将Spring配置为与独立代理一起使用

      @Override
      public void registerStompEndpoints(StompEndpointRegistry  registry) {
          registry.addEndpoint("/stomp");
      }
      
      @Override
      public void configureMessageBroker(MessageBrokerRegistry registry) {
          registry.enableStompBrokerRelay("/topic", "/queue");
          //registry.setApplicationDestinationPrefixes("/jms");
      }
      
    2. 控制器

      @MessageMapping("/stomp")
      @SendTo("/topic/requests")
      public Greeting greeting(HelloMessage message) throws Exception {
          System.out.println("Controller called!");
          Thread.sleep(3000); // simulated delay
          return new Greeting("Hello, " + message.getName() + "!");
      }
      
    3. 因此,它可以连接到hornetQ的运行实例并将消息发送到主题。但是,不是打印指定的字符串,而是打印“undefined”。我知道该消息正在到达队列,因为我有另一个基于浏览器的订阅者。

      控制器中的println永远不会被调用,所以我怀疑我没能正确配置它,但我不知道它会是什么。

      问候语

      public class Greeting {
          private String content;
          public Greeting(String content) {
              this.content = content;
          }
          public String getContent() {
              return content;
          }
      }
      

0 个答案:

没有答案