Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring WebSocket(Stomp)客户端代理_Java_Spring_Spring Boot_Stomp_Spring Websocket - Fatal编程技术网

Java Spring WebSocket(Stomp)客户端代理

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的消息,我知道这是一个相当老的问题。尽管如此,我还是想给出一个新的答案,

我正在尝试使用Spring中的
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模板(工厂);
}

仅当链接可能随时间变化时才将其用作参考。请把答案的要点贴在这里。