Reason for choosing JMS in most cases is reliability. But there are other things that come in mind whether to choose JMS or HTTP.
Reasons to go with HTTP:
- Firewall friendly (web services exposed over internet)
- Supported on all platforms (easiest connectivity in b2b scenario)
- Clients can be simple and lightweight
Reasons to go with JMS:
- Assured delivery and/or only once delivery
- Asynchronous support
- Publish/subscribe
- Queuing if better for achieving larger scalability and reliability
- Better handles temporary high load
- Large volume of messages (EDA)
- Better support in middleware software
- Transaction boundary
In SOA architecture best practice is to use JMS internally (for clients/providers that can easily connect to ESB) and HTTP for connecting to outside partners (over internet).
Using SOAP over JMS gives some advantages compared to HTTP,
specially related to reliability as you may use the persistence and acknowledgment features built in the standard.
The same applies if you need to establish asynchronous communication or need to use the load balancing features provided by JMS servers.
We can achieve this using http but the implementation would be much more complicated.
If we do SOAP over JMS, in fact we can do load balancing.. where as with SOAP over HTTP requires additional hardware like IP Sprayers.
If we do SOAP over JMS, in fact we can do load balancing.. where as with SOAP over HTTP requires additional hardware like IP Sprayers.