Wednesday, May 14, 2008

ESB performance and synchronous soap calls

For one of my project we were performance tuning our esb / bpel projects on the soa suite and we noticed that the esb dequeues one jms message a time and it waits until the whole process was completed before it dequeues the next message. Our project looks like this, the main esb calls a bpel process which start 2 other esb processes. So the total performance was a bit disappointing with hundreds of big messages. With the help of Chintan we found the problem. It seems that we used a synchronous bpel process so the calling esb process was waiting until it finishes
even when the first action of bpel is return true to the calling esb. It still waits until the whole bpel is finished. I had to create an asynchronous bpel process with a synchronous routing rule. Now the esb dequeues the next messages while the bpel is still running. Here is a example of the esb and bpel process.
First we add a jms adapter to the esb project. JDeveloper creates the adapter with a router.
The next step is to create a bpel project and make sure you use the asynchronous option.
In the bpel editor we first initiate the callback client and after that we do our business in my case we wait for a few seconds. We can deploy this bpel project to the soa suite server.
We return to the esb project where we add a soap adapter. This soap adapter is the wsdl url to bpel process. Next we add a routing rule to this bpel web service.
Now we can deploy this esb project to the soa suite server. If we add 10 messages to the queue we see that the esb does not wait now for the bpel process to finish.

1 comment:

  1. Another important factor to consider to improve ESB performance is to use best of the breed XML parser, such as vtd-xml