簡體   English   中英

Spring WebSocket(Stomp)客戶端代理

[英]Spring WebSocket(Stomp)Client proxy

我正在嘗試使用Spring的WebSocketStompClient 我需要設置一個代理來訪問STOMP服務器。 我嘗試使用通常的socksProxySet, socksProxyHost, socksProxyPort沒有成功。

您是否知道如何為WebSocket(Stomp)Client設置代理?

我知道這是一個相當古老的問題。 盡管如此,我想給出一個新的答案,因為它可能對碰巧遇到同樣問題的人有所幫助。

您可以提供自己的RestTemplate,並將代理正確配置到您的stomp客戶端:

@Bean
public WebSocketStompClient client() {
    StandardWebSocketClient client = new StandardWebSocketClient();
    List<Transport> webSocketTransports = Arrays.asList(new WebSocketTransport(client),  new RestTemplateXhrTransport(getRestTemplate()));
    SockJsClient sockJsClient = new SockJsClient(webSocketTransports);
    WebSocketStompClient stompClient = new WebSocketStompClient(sockJsClient);
    stompClient.setAutoStartup(true);
    stompClient.setMessageConverter(new MappingJackson2MessageConverter());
    return stompClient;
}

// Rest template with proxy configuration
private RestTemplate getRestTemplate() {
    HttpClientBuilder clientBuilder = HttpClientBuilder.create();
    if (environment.getProperty("http.proxySet", boolean.class, false)) {
        String proxyHost = environment.getProperty("http.proxyHost");
        String proxyUser = environment.getProperty("http.proxyUser");
        String proxyPassword = environment.getProperty("http.proxyPassword");
        Integer proxyPort = environment.getProperty("http.proxyPort", Integer.class);
        CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
        credentialsProvider.setCredentials(
                new AuthScope(proxyHost, proxyPort),
                new UsernamePasswordCredentials(proxyUser, proxyPassword));

        HttpHost myProxy = new HttpHost(proxyHost, proxyPort);
        clientBuilder.setProxy(myProxy)
                .setProxyAuthenticationStrategy(new ProxyAuthenticationStrategy())
                .setDefaultCredentialsProvider(credentialsProvider);
    }

    HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
    factory.setHttpClient(clientBuilder.build());
    return new RestTemplate(factory);
}

如果它是Stomp-over-Websocket,如果你有像RabbitMQ這樣的本地Stomp代理和擴展插件,你可以使用:

https://docs.spring.io/spring/docs/current/spring-framework-reference/html/websocket.html#websocket-stomp-handle-broker-relay

注意:默認值不喜歡> 8kB的消息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM