<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Hello,</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
We are trying to build an API gateway using undertow as a servlet extension, this has been working great until we started our performance tests.</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Our setup is two gateways balancing traffic towards 10+ servers and we are using JBoss EAP 7.0 We have observed that some of our requests fail with 503 response. When we get a 503 response from a request, we have also observed that it never reaches the proxy
target.</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
I made a small test on my machine to see if I could get the same error, to my surprise this was very easy. First I tried with the following code.</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<span>public class ApiGatewayServletExtension implements ServletExtension {<br>
</span>
<div><br>
</div>
<div> @Override<br>
</div>
<div> public void handleDeployment(DeploymentInfo deploymentInfo, ServletContext servletContext) {<br>
</div>
<div> LOG.info("Deploying {}...", MethodHandles.lookup().lookupClass().getSimpleName());<br>
</div>
<div> deploymentInfo.addInitialHandlerChainWrapper(handler -> {<br>
</div>
<div> try {<br>
</div>
<div> LoadBalancingProxyClient loadBalancer = new LoadBalancingProxyClient()<br>
</div>
<div> .addHost(new URI("http://localhost:8282"))<br>
</div>
<div> .setConnectionsPerThread(20);<br>
</div>
<div> return new ProxyHandler(loadBalancer, 30000, handler);<br>
</div>
<div> } catch (URISyntaxException ex) {<br>
</div>
<div> throw new IllegalStateException(ex);<br>
</div>
<div> }<br>
</div>
<div> });<br>
</div>
<div> }<br>
</div>
<span>}</span><br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
I used JMeter with 20 threads making a simple rest GET request and after 30 seconds or so the test stopped with a 503 response.</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Then I created a small java application using undertow 2.0.17.Final like this.</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<span> public static void main(final String[] args) {<br>
</span>
<div><br>
</div>
<div> try {<br>
</div>
<div> LoadBalancingProxyClient loadBalancer = new LoadBalancingProxyClient()<br>
</div>
<div> .addHost(new URI("http://localhost:8282"))<br>
</div>
<div> .setConnectionsPerThread(20);<br>
</div>
<div> ProxyHandler proxyHandler = new ProxyHandler(loadBalancer, 30000, ResponseCodeHandler.HANDLE_404);<br>
</div>
<div><br>
</div>
<div> Undertow server = Undertow.builder()<br>
</div>
<div> .addHttpListener(8080, "localhost")<br>
</div>
<div> .setHandler(proxyHandler).build();<br>
</div>
<div> <br>
</div>
<div> server.start();<br>
</div>
<div><br>
</div>
<div> } catch (Exception ex) {<br>
</div>
<div> System.out.println(ex.getMessage());<br>
</div>
<div> }<br>
</div>
<span> }</span><br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<span><br>
</span></div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<span>Getting the same result. I have also tried just loading the home page of one of our servers and still the same result.</span></div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<span><br>
</span></div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<span>Any help would be very much appreciated. I have not created a bug because I'm pretty sure we are just missing something here.</span></div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<span><br>
</span></div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<span>Regards Joakim Eriksson. </span></div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
</div>
</body>
</html>