I have only theoretical knowledge about ESB.
Use case:-
- I have ecommerce like application where I can receive orders from multiple sources in different formats .
- Once application is submitted I need to send emails to couple of systems
- Once application is submitted, I need to submit one output file to third party system . Today its XML only but we may need to support formats down the line
- Similarly I need to perform analytics and report preparation.
I see both ESB vs Micro-services can fit here theoretically. Both makes the application loosely coupled and scalable instead of single monolithic application. I am not sure what are the criteria's/attributes I should consider to select off the shelf ESB product(paid or open source ) over disintegrating the app into micro services?
My Understanding :- ESB can be more fit here as it makes the application more loosely coupled where one component/application will simply put the message over channel(which is nothing but java object in java based ESB apps on which other components listens). Now other components like routers/transformer/adapters/endpoints etc. will come into picture and take further action. Here Sending component just needs to know the destination address which will be single channel address.
In case of microservices this is also true, but here consumer need to know URL for each specific operation.
But now a days I have observed most of the folks are preferring micro services over ESB. I think reason can be ESB has its own learning curve/ DSL/ Paid products but micro services is nothing but service is divided in to smaller maintainable restful components. So no learning curve and no paid products.