Java ESB vs服务

Java ESB vs服务,java,ejb-3.0,soa,apache-camel,middleware,Java,Ejb 3.0,Soa,Apache Camel,Middleware,我是JavaEE新手,几天来一直在为一些基本的中间件概念而挣扎,我相信我可能刚刚在对“如何工作”的理解上取得了突破;这个问题的一部分是要求确认我的调查结果,另一部分是合法的问题;-) 请确认/澄清:我对服务总线/MOM(面向消息的中间件)的理解是,它们本质上旨在异步处理客户端请求。这与通常由某种服务实现的同步请求-响应周期相反。在Java中,这样的总线/MOM可能类似于ApacheCamel,而同步服务可能类似于EJB(3)。因此,如果客户机需要立即处理请求,HttpRequest可能会转到一个

我是JavaEE新手,几天来一直在为一些基本的中间件概念而挣扎,我相信我可能刚刚在对“如何工作”的理解上取得了突破;这个问题的一部分是要求确认我的调查结果,另一部分是合法的问题;-)

请确认/澄清:我对服务总线/MOM(面向消息的中间件)的理解是,它们本质上旨在异步处理客户端请求。这与通常由某种服务实现的同步请求-响应周期相反。在Java中,这样的总线/MOM可能类似于ApacheCamel,而同步服务可能类似于EJB(3)。因此,如果客户机需要立即处理请求,
HttpRequest
可能会转到一个web服务,然后该服务将请求转发到正确的EJB;EJB处理消息并将结果返回给服务,然后服务将
HttpResponse
返回给客户端。同样地,如果客户端有一个不阻塞它们的请求,并且该请求只需要处理,那么web服务将它们的
HttpRequest
转发到服务总线上的某个端点,并且该请求被视为一条消息,并由各种处理器(过滤器、转换器等)处理

因此,首先,如果我错误地指出ESB/MOM解决方案最适合处理异步请求,而EJB(同样,3.x)最适合实时响应同步请求,请纠正我的错误;或者确认我是正确的

在这种情况下,在我看来,大型应用程序需要两种类型的后端来处理同步(阻塞)和异步(非阻塞)客户端请求。因此,我的理论是让我的后端实现如下:

  • 使用像JBoss或GlassFish这样成熟的应用服务器
  • 在应用服务器的web容器中有两个war:
    WebServices.war
    ESB.war
    ;分别代表后端“网关”和服务总线
  • 在应用服务器的业务容器中,有所有我的EJB
  • 现在,
    WebService.war
    (网关)可以检测是将请求中继到ESB还是EJB
我的第二个问题是:我是否在这里偏离了基础,是否错过了中间件101的基本概念,或者这是一种折衷的方法?

编辑:从最初的回答中,我已经看出我在两个方面错了:(1)ESB和EJB实际上可以是同步的或异步的,(2)在使用MDB时,EJB可以像ESB一样连接起来

因此,这些纠正给我带来了一些新的心理障碍:

  • 何时使用ESB,何时使用MDB/EJB解决方案;及
  • 我非常喜欢ApacheCamel的处理器API(EIP的实现);我是否可以使用MDB/EJB,但在每个EJB中只使用驼峰处理器(
    Filter
    WireTap
    ,等等)

这是一个大问题,应该得到一个大答案

ESB可以处理同步或异步请求,消息通常是异步使用的

然而,您的后端实现理论是非常错误的

JAX-WS-web服务可以直接运行EJB-jar或EAR,并且可以在任何应用服务器上以这种方式运行。EJB可以将消息放入队列,甚至可以是异步的

您不应该将请求中继到ESB,而应该将请求中继到ESB

ESB应该在客户端和后端之间中继和转换请求和响应。ESB的一个重要思想是,如果后端发生更改,客户机不知道也不关心,因为他们的合同是与ESB而不是后端签订的

综上所述,如果您的应用程序已经公开了web服务,那么您可能不需要ESB,并且请记住,没有一种方法是正确的或错误的

我建议你写一个更明确的问题,涵盖你的具体问题,你可能会得到大量关于如何解决它的建议

更新

您还可以得到消息驱动的EJB,它确实可以让EJB以类似总线的方式链接在一起

进一步更新

因此,使用ESB的一个场景是,如果需要将遗留系统中的非标准服务作为SOAP服务公开。然而,还有更多的事情要考虑,你也应该为你的组织实现一个数据字典,这将允许更大的机会,即使你的遗留系统被替换,ESB公开的服务也可以保持不变。 因此,作为一个具体的例子,组织应该在其数据字典中定义客户实体的外观,ESB可以公开服务来检索客户。ESB将对基于遗留系统执行一些调用,然后转换结果。如果将来存储客户的后端系统发生变化,ESB公开的服务可能会保持不变,只需要更新后端调用和转换

现在希望有了这一点,下一点将是有意义的。所有这些都可以通过“传统”ESB(如JBoss ESB或Mule ESB)实现,但也可以使用EJB+Camel(或其他东西)

开箱即用ESB的优点是提供了连接器、侦听器和转换器。但是,如果开箱即用的功能都不能帮助您,那么您选择的方向几乎没有什么不同

在家中开发ESB的一个优势是可维护性,与查找专门的ESB资源或培训资源相比,找到熟悉EJB并能够快速学习(如果需要)的资源要容易得多


我希望这有帮助

正如您所注意到的,中间件/集成的定义和术语有点混乱。让我澄清一下

A