2016-07-07 31 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"); 
    }); 
}