softwaremill / softwaremill/elasticmq
Connection issue with proxy in Java
Nobody has claimed this yet.
- Dominant language
- Scala
- Stars
- 2.9k
- Forks
- 203
- Avg merge
- 1d 7h
- Merged PRs (30d)
- 6
Description
Hello,
I have an issue when connecting to the elasticmq queue when on my work proxy. It seems to work fine if I disconnect from the internet. But otherwise I get the following.
Exception
[Fatal Error] loose.dtd:31:3: The declaration for the entity "HTML.Version" must end with '>'.
2016-08-23 12:44:10.282 INFO 14543 --- [pool-1-thread-1] c.a.http.DefaultErrorResponseHandler : Unable to parse HTTP response content.
org.xml.sax.SAXParseException: The declaration for the entity "HTML.Version" must end with '>'.
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:257) ~[na:1.8.0_73]
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:339) ~[na:1.8.0_73]
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:121) ~[na:1.8.0_73]
at com.amazonaws.util.XpathUtils.documentFrom(XpathUtils.java:133) ~[aws-java-sdk-core-1.11.28.jar:na]
at com.amazonaws.util.XpathUtils.documentFrom(XpathUtils.java:140) ~[aws-java-sdk-core-1.11.28.jar:na]
at com.amazonaws.http.DefaultErrorResponseHandler.parseContentAsXml(DefaultErrorResponseHandler.java:104) [aws-java-sdk-core-1.11.28.jar:na]
at com.amazonaws.http.DefaultErrorResponseHandler.createAse(DefaultErrorResponseHandler.java:82) [aws-java-sdk-core-1.11.28.jar:na]
at com.amazonaws.http.DefaultErrorResponseHandler.handle(DefaultErrorResponseHandler.java:69) [aws-java-sdk-core-1.11.28.jar:na]
at com.amazonaws.http.DefaultErrorResponseHandler.handle(DefaultErrorResponseHandler.java:45) [aws-java-sdk-core-1.11.28.jar:na]
at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:1355) [aws-java-sdk-core-1.11.28.jar:na]
at com.amazonaws.http.AmazonHttpClient.executeOneRequest(AmazonHttpClient.java:939) [aws-java-sdk-core-1.11.28.jar:na]
at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:714) [aws-java-sdk-core-1.11.28.jar:na]
at com.amazonaws.http.AmazonHttpClient.doExecute(AmazonHttpClient.java:465) [aws-java-sdk-core-1.11.28.jar:na]
at com.amazonaws.http.AmazonHttpClient.executeWithTimer(AmazonHttpClient.java:427) [aws-java-sdk-core-1.11.28.jar:na]
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:376) [aws-java-sdk-core-1.11.28.jar:na]
at com.amazonaws.services.sqs.AmazonSQSClient.doInvoke(AmazonSQSClient.java:1750) [aws-java-sdk-sqs-1.11.28.jar:na]
at com.amazonaws.services.sqs.AmazonSQSClient.invoke(AmazonSQSClient.java:1720) [aws-java-sdk-sqs-1.11.28.jar:na]
at com.amazonaws.services.sqs.AmazonSQSClient.receiveMessage(AmazonSQSClient.java:1370) [aws-java-sdk-sqs-1.11.28.jar:na]
at uk.co.bbc.seg_uploader.messaging.SQSSegNotificationQueue.retrieveSQSMessages(SQSSegNotificationQueue.java:59) [classes/:na]
at uk.co.bbc.seg_uploader.messaging.SQSSegNotificationQueue.receiveNotificationsFromQueue(SQSSegNotificationQueue.java:48) [classes/:na]
at uk.co.bbc.seg_uploader.messaging.SQSSegNotificationQueue.pollQueue(SQSSegNotificationQueue.java:35) [classes/:na]
at uk.co.bbc.seg_uploader.schedule.SegUploaderScheduler.schedule(SegUploaderScheduler.java:50) [classes/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_73]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_73]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_73]
at java.lang.reflect.Method.invoke(Method.java:497) ~[na:1.8.0_73]
at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:65) [spring-context-4.3.2.RELEASE.jar:4.3.2.RELEASE]
at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) [spring-context-4.3.2.RELEASE.jar:4.3.2.RELEASE]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_73]
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) [na:1.8.0_73]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) [na:1.8.0_73]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) [na:1.8.0_73]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_73]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_73]
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_73]
2016-08-23 12:44:10.298 ERROR 14543 --- [pool-1-thread-1] u.c.b.s.m.SQSSegNotificationQueue : SQS Client failed to receive messages from Seg Uploader Queue
com.amazonaws.services.sqs.model.AmazonSQSException: null (Service: AmazonSQS; Status Code: 504; Error Code: 504 Gateway Time-out; Request ID: null)
at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:1386) ~[aws-java-sdk-core-1.11.28.jar:na]
at com.amazonaws.http.AmazonHttpClient.executeOneRequest(AmazonHttpClient.java:939) ~[aws-java-sdk-core-1.11.28.jar:na]
at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:714) ~[aws-java-sdk-core-1.11.28.jar:na]
at com.amazonaws.http.AmazonHttpClient.doExecute(AmazonHttpClient.java:465) ~[aws-java-sdk-core-1.11.28.jar:na]
at com.amazonaws.http.AmazonHttpClient.executeWithTimer(AmazonHttpClient.java:427) ~[aws-java-sdk-core-1.11.28.jar:na]
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:376) ~[aws-java-sdk-core-1.11.28.jar:na]
at com.amazonaws.services.sqs.AmazonSQSClient.doInvoke(AmazonSQSClient.java:1750) ~[aws-java-sdk-sqs-1.11.28.jar:na]
at com.amazonaws.services.sqs.AmazonSQSClient.invoke(AmazonSQSClient.java:1720) ~[aws-java-sdk-sqs-1.11.28.jar:na]
at com.amazonaws.services.sqs.AmazonSQSClient.receiveMessage(AmazonSQSClient.java:1370) ~[aws-java-sdk-sqs-1.11.28.jar:na]
at uk.co.bbc.seg_uploader.messaging.SQSSegNotificationQueue.retrieveSQSMessages(SQSSegNotificationQueue.java:59) [classes/:na]
at uk.co.bbc.seg_uploader.messaging.SQSSegNotificationQueue.receiveNotificationsFromQueue(SQSSegNotificationQueue.java:48) [classes/:na]
at uk.co.bbc.seg_uploader.messaging.SQSSegNotificationQueue.pollQueue(SQSSegNotificationQueue.java:35) [classes/:na]
at uk.co.bbc.seg_uploader.schedule.SegUploaderScheduler.schedule(SegUploaderScheduler.java:50) [classes/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_73]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_73]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_73]
at java.lang.reflect.Method.invoke(Method.java:497) ~[na:1.8.0_73]
at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:65) [spring-context-4.3.2.RELEASE.jar:4.3.2.RELEASE]
at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) [spring-context-4.3.2.RELEASE.jar:4.3.2.RELEASE]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_73]
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) [na:1.8.0_73]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) [na:1.8.0_73]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) [na:1.8.0_73]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_73]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_73]
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_73]
Code
AWSCredentialsProviderChain credentialsProvider = new AWSCredentialsProviderChain(new DefaultAWSCredentialsProviderChain());
ClientConfiguration clientConfiguration = new ClientConfiguration();
AmazonSQSClient sqsClient = new AmazonSQSClient(credentialsProvider, clientConfiguration);
sqsClient.setEndpoint("http://localhost:9324/queue");
ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest("queue1").withMaxNumberOfMessages(10);
List<Message> sqsMessages;
ReceiveMessageResult receiveMessageResult = sqsClient.receiveMessage(receiveMessageRequest);
sqsMessages = receiveMessageResult.getMessages();
I had a similar issue with moto in Python and it was suggested to set env no_proxy to 169.254.169.254. https://github.com/spulec/moto/issues/605
os.environ['no_proxy'] = '169.254.169.254'
I tried this here to no avail.
System.setProperty("no_proxy", "169.254.169.254");
Further debugging. Looks likes Apache is trying to route the request to:
http://localhost.bbc.co.uk:9324/queue/queue1
Wondered if you had any ideas. Cheers
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start at SQSSegNotificationQueue.retrieveSQSMessages line 59 and the Java AWS client setup shown in the report, especially ClientConfiguration and setEndpoint. Reproduce receiveMessage with the proxy enabled and inspect why the localhost endpoint is being rewritten. Done means the client reaches the local ElasticMQ queue through the proxy environment and receives messages successfully.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- aws, java
- Domain
- api, networking
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100