gpt4 book ai didi

java - ESB 与服务

转载 作者:搜寻专家 更新时间:2023-11-01 01:45:45 24 4
gpt4 key购买 nike

我是 Java EE 的新手,几天来一直在为一些基本的中间件概念苦苦挣扎,相信我可能刚刚在理解“程序如何工作”方面取得了突破;这个问题的一部分是要求确认我的发现,另一部分是一个合理的问题 ;-)。

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

所以首先,如果我说 ESB/MOM 解决方案最适合处理异步请求,而 EJB(同样是 3.x)最适合响应实际的同步请求,请纠正我-时间;或确认我是正确的。

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

  • 使用 JBoss 或 GlassFish 等成熟的应用服务器
  • 在应用服务器的 web 容器中有两个 WAR:WebServices.warESB.war;分别代表后端“网关”和服务总线
  • 在应用服务器的业务容器中有我所有的 EJB
  • 现在,WebService.war(网关)可以检测是将请求中继到 ESB 还是 EJB

我的第二个问题是:我是不是离题太远了,我是否错过了中间件 101 的基本概念,或者这是一种半途而废的方法?

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

所以这些更正给我带来了一些新的心理障碍:

  • 何时使用 ESB,何时使用 MDB/EJB 解决方案;和
  • 真的喜欢 Apache Camel 的处理器 API(EIP 的实现);我可以使用 MDB/EJB 但在每个 EJB 内部只使用 Camel 处理器(FilterWireTap 等)吗?

最佳答案

这是一个大问题,值得一个大答案。

ESB 可以处理同步或异步请求,消息通常以异步方式使用。

但是您的后端实现理论是错误的。

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

您不应该将请求中继到 ESB,而是相反。

ESB 应该在客户端和后端之间中继和转换请求和响应。 ESB 的一个重要想法是,如果后端发生变化,客户不知道也不关心,因为他们的契约(Contract)是与 ESB 而不是后端签订的。

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

我确实建议您写一个更明确的问题来涵盖您的具体问题,您可能会得到很多关于如何解决它的建议。

更新

您还可以获得消息驱动的 EJB,它确实可以让 EJB 像时尚一样以总线方式链接在一起。

进一步更新

所以我会使用 ESB 的一个场景是,如果我需要将遗留系统中基于非标准的服务公开为 SOAP 服务。然而,还有更多需要考虑的因素,您还应该为您的组织实现数据字典,这将使 ESB 公开的服务更有可能保持不变,即使您的遗留系统已被替换。

举个具体的例子,组织应该在其数据字典中定义客户实体的样子,ESB 可以公开服务来检索客户。 ESB 将在基于遗留系统的系统上执行一些调用,然后转换结果。如果将来存储客户的后端系统发生变化,ESB暴露的服务可能保持不变,只需要更新后端调用和转换。

现在希望考虑到这一点,接下来的内容会有意义。所有这些都可以通过“传统”ESB 实现,例如 JBoss ESB 或 Mule ESB,但也可以使用 EJB + Camel(或其他东西)。

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

在家中开发 ESB 的一个优势是可维护性,与寻找专门的 ESB 资源或培训资源相比,找到熟悉 EJB 并且可以在需要时快速学习 Camel 的资源要容易得多。

希望对您有所帮助!

关于java - ESB 与服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11157041/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com