We are currently evaluating the optimal integration pattern (both Inbound and Outbound) to be used for our Service Cloud implementation. A simple use case is to synchronize Cases and Incidents (bi-directional sync) via a middle tier. Polling is out of scope.
The plan is to use Request-Reply pattern for the inbound and Fire and Forget pattern for the outbound. This perfectly aligns with the use case and business processes; however, would like to understand the pros and cons of using a single pattern for both Inbound and Outbound calls, i.e either Request-Reply or Fire and Forget.
From the analysis what we found are as below:
For Inbound, Request-Reply works well as the response is sent immediately as part of the same thread. Ideally we do not feel any of the below governors are applicable here.
- Concurrent Apex Request Limit (10 requests over 5 seconds), no complex business logic
- Concurrent API Request Limit (25 requests over 20 seconds), no complex logic and
- Total API Requests (not a big deal as it is a soft limit)
What are the exact key limitations one should account for?
For Inbound, in case if Fire and Forget pattern is chosen, we feel the below are the limitations.
Need to invoke a separate Outbound call (to pass the response) which eventually falls into the same inbound transaction. This along with auto retries might lead to the below governor:
- Concurrent Apex Request Limit
Is our assumption justified? Are there any other limitations we should account for?
For Outbound, Fire and Forget works well as the process/thread need not wait until a response is sent back (the call to the target system goes via a middle tier).
However, in case if Request-Replay pattern is followed for Outbound the thread/process has to wait until the response is received or times out. After further analysis we found the below governors might be applicable for this case:
- Callout time-out Limit (10 seconds by default)
- Concurrent Apex Request Limit, Not sure if this comes into the act, does callout come under this governor? and what are the other considerations?