Configure outbound thread pools in JBoss EAP 6.4.4
I'm implementing a SOAP application (A) running in a JBoss EAP 6.4.4. This application is calling several other services using outbound SOAP and REST calls.
I made some performance tests with a request that calls via (A) another service (B), running also in a JBoss EAP. Both (A) and (B) have the same inbound HTTP connection/thread pools configured.
With high load (A) has a throughput of 6.5 messages per second which is not a lot. Calling the (B) directly I have several hundreds of requests. So my conclusion is that there must be a problem with outbound thread/connection pools in (A). The system has long to open a connection from (A) to (B).
(A) is doing more interaction with the database, but the difference between 6.5 and several 100 is huge. So it cannot only be the database IO.
How do I configure them in JBoss? For outbound SOAP calls I use CXF and for REST I use RESTEasy.
Thanks for any input.
Responses
Hi Michel
If in your JAX-WS client you're making a remote call to a WSDL then this is more than likely going to be the biggest performance bottleneck. I presume (B) is local WSDL?
What you should do is, firstly use a local WSDL packaged in your application. Secondly, you can cache or pool the client proxies for the JAX-WS client. These two things will avoid the network round trip of fetching the WSDL and parsing it for every client, and further more, creating the Port and Service objects is very resource intensive, so you'd avoid that by caching and pooling these objects. CXF proxies are thread-safe for most use cases. Refer to [1]
Are you seeing the same sort of slowdown for the RESTful clients? For that I'd ask you to raise a case as that should not be the case so we may need to look in to the JAX-RS side a bit more.
Thanks Mus
[1] https://cxf.apache.org/faq.html#FAQ-AreJAX-WSclientproxiesthreadsafe?
Welcome! Check out the Getting Started with Red Hat page for quick tours and guides for common tasks.
