2016-07-07 29 views
-1

根据activemq的文档,我们需要设置http://activemq.apache.org/stomp客户端标头拥有持久订阅。Spring websocket stomp sock js activemq耐用的订阅

我在连接标头中设置了client-id,在订阅标头中设置了activemq.subscriptionName,如下所示,但是我没有看到所需的行为。我们是否需要在Web套接字配置和消息端设置任何东西?

以下是申购代码

var headers = { 
     // additional header 
     'client-id': 'my-client-id' 
}; 

var subscription_headers = { 
     // additional header 
     'activemq.subscriptionName': 'my-client-id' 
}; 

var connect = function() { 
    var socket = new SockJS(webSocketUrl); 
    stompClient = Stomp.over(socket); 

    stompClient.connect(headers, function (frame) { 

     console.log('Connected: ' + frame); 

     stompClient.subscribe(topic, function (message) { 
     ..... 
     ..... 
     }, subscription_headers); 
    }, function(frame) { 
     console.log("Web socket disconnected"); 
    }); 
} 

的WebSocket配置

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.beans.factory.annotation.Value; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.messaging.simp.config.MessageBrokerRegistry; 
import org.springframework.web.socket.config.annotation.AbstractWebSocketMessageBrokerConfigurer; 
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker; 
import org.springframework.web.socket.config.annotation.StompEndpointRegistry; 

@Configuration 
@EnableWebSocketMessageBroker 
public class WebSocketConfiguration extends AbstractWebSocketMessageBrokerConfigurer { 

@Autowired 
@Value("${spring.websocket.activemq.relay.host}") 
private String relayHost; 

@Autowired 
@Value("${spring.websocket.activemq.relay.port}") 
private int relayPort; 

@Autowired 
@Value("${spring.activemq.user}") 
private String activeMqLogin; 

@Autowired 
@Value("${spring.activemq.password}") 
private String activeMqPassword; 

    @Override 
    public void configureMessageBroker(MessageBrokerRegistry registry) { 
     registry.enableStompBrokerRelay("/queue/", "/topic/") 
     .setRelayHost(relayHost) 
     .setRelayPort(relayPort) 
     .setSystemLogin(activeMqLogin) 
     .setSystemPasscode(activeMqPassword); 
     registry.setApplicationDestinationPrefixes("/testbrkr"); 
    } 

    @Override 
    public void registerStompEndpoints(StompEndpointRegistry registry) { 
     registry.addEndpoint("/exWs").withSockJS(); 
    } 
} 
+0

能否请您发表有关'春天-websocket'配置? –

回答

1

这个工作,直接传递的报头中的函数如图

var connect = function() { 
    var socket = new SockJS(webSocketUrl); 
    stompClient = Stomp.over(socket); 

    stompClient.connect({"client-id": "my-client-id"},, function (frame) { 

     console.log('Connected: ' + frame); 

     stompClient.subscribe(topic, function (message) { 
     ..... 
     ..... 
     }, {"activemq.subscriptionName": "my-client-id"}); 
    }, function(frame) { 
     console.log("Web socket disconnected"); 
    }); 
}