ESB是SOA解决方案中用于路由,消息转换,协议桥接等的传统中间件。现在,几家供应商提供了一种名为API Gateway的新型中间件解决方案。这些解决方案通常被描述为访问组织公开提供的REST和SOAP服务的中心点。但是,API网关解决方案似乎提供了典型ESB功能的子集。
那么,ESB和API网关之间有什么区别?我什么时候应该使用其中一种?
API网关通常充当Web服务的代理并提供有趣的价值,例如:日志记录,使SOAP服务可调用,如REST服务,调试帮助,跟踪等...因为API网关位于消费者和您的服务,它可以轻松捕获流量并做这些事情。
企业服务总线(如nServiceBus)被设计为位于消息传递协议(如RabbitMQ)之上,以便为其提供基本消息传递或pub-sub不具备的功能(或难以实现的功能),例如:数据库存储持久消息,重试逻辑,侦听器封装,订阅消息的简单方法和传奇。您可以在不使用ESB的情况下使用消息传递协议,但不能使用其他方式。例如,您可以在不使用RabbitMQ的情况下使用nServiceBus。
由于API网关和ESB都能够为服务代理提供服务,如果只考虑这两种工具的中介和转换功能,它们可能看起来相同。 API网关与我的关键区别在于它所培育的特定目的。除了提供转换和一些路由功能之外,API网关应该能够充当它所支持的资源的入口点。此外,他们应该能够将访问控制和限制方面委托给其他专用组件,利用它们应该能够保证所需的行为。由于API网关将作为API管理解决方案的一部分,因此OOTB将支持所有这些功能。
使用ESB和其他外部组件或软件可以为服务代理实现类似的行为。但是,由于ESB旨在用于满足更广泛的集成要求,并且不专门用于API管理,因此实现它们的用例将更加困难。