[英]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代理和擴展插件,你可以使用:
注意:默認值不喜歡> 8kB的消息
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.