2017-11-15 2 views
0

POC 용 샘플 웹 응용 프로그램을 만들었습니다. 이 응용 프로그램은 Amazon EC2 liberty 17.0.0.2에서 실행됩니다. 아래 서블릿에 요청을 보내면 AWS SQS에 메시지를 보내야합니다.websphere liberty에서 실행중인 응용 프로그램 17.0.0.2 또는 최신 17.0.0.3은 프록시 시스템 속성을 사용할 수 없습니다.

http://localhost:8080/TestSqsWeb/SqsServlet?message=Hello333

우리의 EC2는 인터넷에 연결하는 프록시를 필요 coorporate EC2입니다. 그래서 jvm.options 파일에서 자유롭게 프록시 설정을 제공했습니다.

-Dhttps.nonProxyHosts=169.254.169.254|localhost|127.0.0.1 
-Dhttp.nonProxyHosts=169.254.169.254|localhost|127.0.0.1 
-Dhttp.proxyHost=proxy.ebiz.abc.com 
-Dhttp.proxyPort=80 
-Dhttps.proxyHost=proxy.ebiz.abc.com 
-Dhttps.proxyPort=80 

다음은 예외입니다.

org.apache.http.conn.ConnectTimeoutException: Connect to sqs.us-west-2.amazonaws.com:443 [sqs.us-west-2.amazonaws.com/52.119.168.22] failed: connect timed out 

추가 분석 후 연결을 만드는 동안 프록시 시스템 속성을 사용하지 않는 것으로 나타났습니다. System.getProperty를 사용하여 코드에서 모든 시스템 속성을 인쇄했습니다. 그것은 내 시스템 속성을 인쇄합니다. 즉, 구성이 올바른 것입니다.

추가 분석을 위해 같은 프록시 구성으로 동일한 EC2에서 tomcat-8에 동일한 응용 프로그램을 배포 했으므로 작동 중입니다. 연결을 만들고 내 메시지를 AWS SQS 대기열로 보낼 수 있습니다.

이 분석 후에 나는 자유에 문제가 있다고 결론을 내렸다.

[내 샘플 응용 프로그램의 라이브러리] [1]

[1]: https://i.stack.imgur.com/K2gbj.png 

은 내가 찾은 게시물의 하나, 그것은 때문에 HttpClient를의 이전 버전에 일어날 수 있지만 HttpClient를-4.5.2 최신을 사용하고 있습니다. jar 및 httpcore-4.4.4.jar를 참조하십시오.

Liberty 17.0.0.2/17.0.0.3에서 동일한 문제가 발생 했습니까? IBM Java SDK-8을 사용하고 있습니다.

답변

0

제가 알고 있듯이 프록시 시스템 속성은 HttpUrlConnection과 같이 JDK에서 제공하는 HTTP 연결 클래스에서 작동합니다. Apache HTTP Client를 사용하는 경우, 해당 API를 사용할 수 없습니다.

대신 JDK에서 제공하는 시스템 속성을 사용하여, 당신은 다음과 같은 코드를 수정할 수 있습니다

public static void main(String[] args)throws Exception { 
     CloseableHttpClient httpclient = HttpClients.createDefault(); 
     try { 
      HttpHost target = new HttpHost("httpbin.org", 443, "https"); 
      HttpHost proxy = new HttpHost("127.0.0.1", 8080, "http"); 

      RequestConfig config = RequestConfig.custom() 
       .setProxy(proxy) 
       .build(); 
      HttpGet request = new HttpGet("/"); 
      request.setConfig(config); 
      ... 

이 코드 샘플은 Apache HTTP Client examples page에서 찍은.

여기 (프록시 인증 포함) 기타 샘플이 있습니다이 도움이 https://hc.apache.org/httpcomponents-client-ga/examples.html

희망, 앤디

+0

나는 AWS 라이브러리와 JMS API를 사용하고 있습니다. 나는 HTTP 클라이언트 레벨에 직접 액세스하지 못한다. AWS Liberary는 내부적으로 http 클라이언트를 사용합니다. –

+0

JMS API를 AWS 라이브러리와 함께 사용하고 있습니다. AWS SQS는 JMS 공급자입니다. 나는 HTTP 클라이언트 레벨에 직접 액세스하지 못한다. AWS Liberary는 내부적으로 http 클라이언트를 사용합니다. 일부 코드 스 니펫 –

+0

AWS 라이브러리와 함께 JMS API를 사용하고 있습니다. AWS SQS는 JMS 공급자입니다. 나는 HTTP 클라이언트 레벨에 직접 액세스하지 못한다. AWS Liberary는 내부적으로 http 클라이언트를 사용합니다. 내 수입을 참조하십시오. \t ///////////////////////////////////// \t \t import javax.jms.Queue; \t import javax.jms.세션; \t \t import com.amazon.sqs.javamessaging.ProviderConfiguration; \t import com.amazon.sqs.javamessaging.SQSConnection; \t import com.amazon.sqs.javamessaging.SQSConnectionFactory; \t import com.amazonaws.auth.InstanceProfileCredentialsProvider; \t import com.amazonaws.services.sqs.AmazonSQSClientBuilder; –

관련 문제