The Art of Microservices Integration Using Service Choreography

Looking back

Looking forward

Service orchestration vs service choreography

Clarifying asynchronous integration in service choreography

  • Non-blocking I/O — I’m an advocate of asynchronous, non-blocking I/O as part of building more efficient, resilient and scalable services that interact in some way with external I/O. However, in the context of service choreography, this is certainly not what we mean by asynchronous integration. Non-blocking I/O could still be used within the request/response cycle for orchestration use cases, and, whilst it has its advantages in one sense, certainly doesn’t, on its own, buy any architectural benefits of isolation and autonomy.
  • Classic MQ Request/Reply — It’s possible using classic MQ technology (e.g. JMS, AMQP) to achieve asynchronous request/reply behaviour. You could pop a message on a queue, and wait for a response on some temporary reply queue. There’s certainly some added decoupling in that the caller needn’t know exactly who will reply, but, like with non-blocking I/O, if this is being done as part of a service handling an incoming request, then, despite the communication with the MQ itself being asynchronous in nature, the service is still not acting autonomously. If a consumer responsible for replying is down, and the call must then timeout, it’s ultimately no different to an HTTP endpoint being unavailable or failing.

End-to-end autonomy

Added complexity?

Touching on boundaries

Coming next




Software engineering nut. Cyclist. Musician. Dog lover

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Andrew Easter

Andrew Easter

Software engineering nut. Cyclist. Musician. Dog lover

More from Medium

microservies in monorepo

Nullability in Protofiles via OneOf pattern

Mutation testing

Client-Service-Server Model