- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我是 Java EE 的新手,几天来一直在为一些基本的中间件概念苦苦挣扎,相信我可能刚刚在理解“程序如何工作”方面取得了突破;这个问题的一部分是要求确认我的发现,另一部分是一个合理的问题 ;-)。
请确认/澄清:我对服务总线/MOM(面向消息的中间件)的理解是,它们本质上旨在异步处理客户端请求。这与通常由某种服务实现的同步的正常请求-响应周期相反。在 Java 中,这样的总线/MOM 可能类似于 Apache Camel,而同步服务可能类似于 EJB(3)。因此,如果客户端需要立即处理请求,HttpRequest
可能会转至 Web 服务,然后将请求转发到正确的 EJB; EJB 处理消息并将结果返回给服务,然后服务将 HttpResponse
返回给客户端。因此,如果客户端有一个不阻止它们并且只需要处理的请求,Web 服务会将它们的 HttpRequest
转发到服务总线上的某个端点,并且该请求被视为消息并由各种处理器(过滤器、转换器等)处理。
所以首先,如果我说 ESB/MOM 解决方案最适合处理异步请求,而 EJB(同样是 3.x)最适合响应实际的同步请求,请纠正我-时间;或确认我是正确的。
在那种情况下,在我看来,大型应用程序将需要两种 类型的后端来处理同步(阻塞)和异步(非阻塞)客户端请求。所以我的理论是让我的后端实现如下:
WebServices.war
和 ESB.war
;分别代表后端“网关”和服务总线WebService.war
(网关)可以检测是将请求中继到 ESB 还是 EJB我的第二个问题是:我是不是离题太远了,我是否错过了中间件 101 的基本概念,或者这是一种半途而废的方法?
编辑:从最初的回复来看,我已经看出我在两个方面是错误的:(1) ESB 和 EJB 实际上可以同步或异步, (2) 当使用 MDB 时,EJB 可以像 ESB 一样连接起来。
所以这些更正给我带来了一些新的心理障碍:
Filter
、WireTap
等)吗?最佳答案
这是一个大问题,值得一个大答案。
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/
在之前的工作中,有很多关于“企业服务总线”(ESB) 的讨论。我读了一本关于它的概念书的部分内容,但从未真正理解如何具体实现/集成它。我熟悉 SOA/队列/目录服务/等。但我不明白 ESB 到底是什么
我正在使用 Mule ESB 公开 CXF 服务,我需要将请求按原样传递给条件路由器。我看到的大多数示例都将响应传递给条件路由器。 如何在不更改 wsdl 的情况下转发请求? 最佳答案 当 OP 给出
谁能告诉我MQ(消息队列)和ESB(企业服务总线)有什么区别?我知道两者都提供进程间通信和处理消息传递,但在互联网上没有那么多信息,每个人都以不同的方式描述它。我也不知道 Message broker
我创建了一个具有一个端点的自定义路由器。自定义路由器根据入站 URL 的 URL 参数查找端点的目标。我有一个正在运行的示例,我正在浏览器中对其进行测试。我正在尝试解决最后一件事。当我使用 http:
我将一系列服务分组为 Carbon 应用程序,然后将其部署在 WSO2 ESB 上。如果这些服务之一在部署期间失败,则其他服务都不会部署在 ESB 上,而是在重试时出现 Service laready
谁能告诉我MQ(消息队列)和ESB(企业服务总线)有什么区别?我知道两者都提供进程间通信和处理消息传递,但在互联网上没有那么多信息,每个人都以不同的方式描述它。我也不知道 Message broker
JBPM 和 BPEL(和 ESB)有什么区别? 你能解释一下吗? RGDS 最佳答案 我对 JBPM 不太熟悉。但它似乎是一个业务工作流,可以与 Java 服务或基本上基于 Java 的流程一起使用
因此,使用 Mule ESB,我正在 Bing 中搜索某些 PDF 文件。然后我解析 JSON 响应以捕获文件位置的 URL。现在我需要检索文件并保存在本地。以下是我到目前为止所拥有的,但我有一种感觉
这个问题不好问。所以我会尽力问清楚。 我们已经有一个企业 SOA 套件 10G 系统正在运行。 一个小过程,我就这样解释。 Consumer->ESB->BPEL->ESB->Provider Web
我可以在任何应用服务器上部署 Mule。如果是这样,我们如何部署 Mule 示例。 我已将我的 eclipse 配置为运行 JBoss,并且 Mule Flows 不会部署在 JBOss 服务器中。同
我有一个 Mule 应用程序,我在其中向多个 WebServices 发送请求并聚合我得到的响应列表,这个想法是通过从处理列表的 CustomJavaClass 返回它来获取列表的第一个响应: ret
使用 Mule ESB 我注意到您可以(通过任意点连接器)连接应用程序、数据库、Web 服务等。由于我在不同的 ESB(企业服务总线)之间进行比较,我遇到了 WSO2 ESB 并阅读了文档,它似乎只允
我正在构建一个基于 REST 的 Web 服务(有些可能是基于 Soap 的)并且将由外部代理调用。代理是我们网络之外的任何软件。 我正在考虑两种选择 i) 在 esb 外部的容器上运行 Web 服务
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我在 mysql 中创建了一个 SP,它接受 6 个输入参数并给出 2 个输出参数。我想从数据库查找中调用它。我不知道该怎么做。我尝试过不同的 2 代码,但没有成功。请帮忙。 突触代码:
我正在调用下面播种的其余服务
您在何处、何时以及为何在 PHP 项目中使用 ESB? 您认为在 PHP 项目中使用 ESB 有意义的地点、时间和原因? ESB(和 ESB 促进器,如 Mule)是否提供了 PHP 和原生 LAMP
我一直在 SO 和 Mule 论坛上苦苦挣扎,但找不到有效的解决方案。 esb 接收包含一个 id 的单个请求,该请求创建一个 XML 负载,该负载由相关 id 列表组成。然后将此 XML 有效负载拆
我和我的团队将致力于 APIGEE,这是一个 API 开发平台,用于在我们的应用程序中公开一些服务。我正在浏览他们的文档,并试图了解 APIGEE 或任何其他 API 开发平台(如 Mashery)的
我试图了解 ESB Mediation是,确切地说(具体例子),并且正在撞墙。 根据维基百科,数据中介重定向到 Data Transformation文章,唯一提到调解是模糊和神秘的: When th
我是一名优秀的程序员,十分优秀!