Asynchronous Request and Reply

  • synchronously processing the client request before all the back end work is completed may not always be feasible

    • Becuase of

      • Takes too long, lots of processing

      • microservice architecture, lots of calls between services

      • Lots of wait time between I/O

    • Cannot have as client may need low latency (set SLAs) for a response to come back

  • Solution

    • Asynchronous Processing (HTTP Polling or Event Notification)

      • Benefit

        • client does not need to wait

        • If passed to a message queue, can be sure that the requests reaches the server, which is not certain with direct sync requests.

      • How it works

        • The client makes an API request

        • The application now offloads the work to another back end service or message queue

        • The client can poll for the resource/process status using an HTTP GET (HTTP Polling) at regular intervals as appropriate for the client application

        • The status API returns “In-Progress” indicating the back end process is still running

        • Once the process completes, the status will return the required output or another reference to the resource

        • The application can also push event notifications once the process is complete without the need for the client to poll repeatedly

      • Example

        • Imagine you’re too tired to make dinner and decide to place a takeaway order over the phone at your favorite restaurant (API request)

        • The restaurant provides you with an order number (Acknowledgement and reference identifier)

        • You arrive at the restaurant to pick up your order, provide them the order number and the restaurant staff informs you that your order is still not complete

        • If you’re particularly hungry, you might return to the reception to inquire about your order every 5–10 mins (HTTP Polling)

        • Or, the restaurant can provide you with a pager that buzzes once your order is complete (Event Notification)

Last updated