Java Spring WebSocket(Stomp)客户端代理
我正在尝试使用Spring中的Java Spring WebSocket(Stomp)客户端代理,java,spring,spring-boot,stomp,spring-websocket,Java,Spring,Spring Boot,Stomp,Spring Websocket,我正在尝试使用Spring中的WebSocketStompClient。我需要设置一个代理来访问STOMP服务器。我尝试了通常的socksproxy集、socksproxy主机、socksproxy端口,但没有成功 您知道如何为WebSocket(Stomp)客户端设置代理吗?如果它是在WebSocket上运行的,并且如果您有一个本地Stomp代理,如RabbitMQ和扩展插件,您可以使用: 注意:默认设置不喜欢大于8kB的消息,我知道这是一个相当老的问题。尽管如此,我还是想给出一个新的答案,
WebSocketStompClient
。我需要设置一个代理来访问STOMP服务器。我尝试了通常的socksproxy集、socksproxy主机、socksproxy端口
,但没有成功
您知道如何为
WebSocket(Stomp)客户端设置代理吗?
如果它是在WebSocket上运行的,并且如果您有一个本地Stomp代理,如RabbitMQ和扩展插件,您可以使用:
注意:默认设置不喜欢大于8kB的消息,我知道这是一个相当老的问题。尽管如此,我还是想给出一个新的答案,因为它可能对碰巧遇到相同问题的人有所帮助 您可以为自己的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);
}
@Bean
公共WebSocketStompClient客户端(){
StandardWebSocketClient=新的StandardWebSocketClient();
List WebSocketTransport=Arrays.asList(新建WebSocketTransport(客户端)、新建RestTemplateXhrTransport(getRestTemplate());
SockJsClient SockJsClient=新的SockJsClient(webSocketTransports);
WebSocketStompClient stompClient=新的WebSocketStompClient(sockJsClient);
stompClient.setAutoStart(true);
setMessageConverter(新的MappingJackson2MessageConverter());
返回stompClient;
}
//具有代理配置的Rest模板
私有RestTemplate getRestTemplate(){
HttpClientBuilder clientBuilder=HttpClientBuilder.create();
if(environment.getProperty(“http.proxySet”,boolean.class,false)){
字符串proxyHost=environment.getProperty(“http.proxyHost”);
字符串proxyUser=environment.getProperty(“http.proxyUser”);
字符串proxyPassword=environment.getProperty(“http.proxyPassword”);
Integer proxyPort=environment.getProperty(“http.proxyPort”,Integer.class);
CredentialsProvider CredentialsProvider=新的BasicCredentialsProvider();
credentialsProvider.setCredentials(
新的AuthScope(proxyHost、proxyPort),
新用户名密码凭据(proxyUser,proxyPassword));
HttpHost myProxy=新的HttpHost(proxyHost,proxyPort);
clientBuilder.setProxy(myProxy)
.setProxyAuthenticationStrategy(新的ProxyAuthenticationStrategy())
.setDefaultCredentialsProvider(credentialsProvider);
}
HttpComponents客户端HttpRequestFactory工厂=新的HttpComponents客户端HttpRequestFactory();
setHttpClient(clientBuilder.build());
返回新的REST模板(工厂);
}
仅当链接可能随时间变化时才将其用作参考。请把答案的要点贴在这里。