JMS和ESB—它们是如何关联的?

JMS和ESB—它们是如何关联的?,jms,esb,Jms,Esb,对我来说,JMS和ESB似乎是非常相关的东西,我正试图理解它们到底是如何相关的 我已经看到一句话,JMS可以用作ESB的传输——那么除了传输之外,在这样的ESB中还应该存在什么呢?JMS是一个简单的ESB吗?如果不是,那么它缺少真正的ESB吗?JMS提供了一组用于消息传递的api:将消息放到队列中,稍后,可能在地理位置较远的其他人将消息从队列中取出并处理它。我们将消息提供者和使用者的时间和位置解耦。即使消息消费者碰巧停机一段时间,我们也可以继续生成消息 JMS还提供了一种发布/订阅功能,生产者将

对我来说,JMS和ESB似乎是非常相关的东西,我正试图理解它们到底是如何相关的


我已经看到一句话,JMS可以用作ESB的传输——那么除了传输之外,在这样的ESB中还应该存在什么呢?JMS是一个简单的ESB吗?如果不是,那么它缺少真正的ESB吗?

JMS提供了一组用于消息传递的api:将消息放到队列中,稍后,可能在地理位置较远的其他人将消息从队列中取出并处理它。我们将消息提供者和使用者的时间和位置解耦。即使消息消费者碰巧停机一段时间,我们也可以继续生成消息

JMS还提供了一种发布/订阅功能,生产者将消息放到一个“主题”中,任何相关方都可以订阅该主题,在消息生成时接收消息,但目前只关注队列功能

我们已经分离了提供者和消费者之间关系的某些方面。然而,仍然存在一些耦合。首先,就目前情况而言,每条消息都以相同的方式处理。假设我们想为不同类型的消息引入不同类型的处理:

 if ( message.customer.type == Platinum )
      do something special
显然,我们可以编写这样的代码,但另一种方法是使用消息传递系统,可以将不同的消息发送到不同的位置。我们设置了三个队列:

 Request Queue, the producer(s) puts their requests here
 Platinum Queue, platinum consumer processing reads from here
 Standard Queue, a standard consumer reads messages from here
然后,我们所需要的只是队列系统本身的一点聪明,将消息从请求队列传输到白金队列或标准队列

因此,这是一种基于内容的路由功能,是ESB提供的功能。注意,ESB使用JMS提供的基本排队功能

第二种耦合是消费者和生产者必须就消息格式达成一致。在简单的情况下,这很好。但当您开始让许多生产者都将消息放入同一队列时,您就开始遇到版本控制问题。引入了新的消息格式,但您不想更改所有现有的提供程序

  Request Version 1 Queue  Existing providers write here
  Request Version 2 Queue  New provider write here, New Consumer Reads here
ESB提取版本1队列消息并将其转换为版本2消息,然后将其放入版本2队列

消息转换是另一种可能的ESB功能


看看ESB产品,看看它们能做什么。在我为IBM工作时,我最熟悉的是ESB提供了与JMS之外的许多不同协议的集成
大多数在幕后使用JMS来传输、存储和移动消息。其中一个解决方案OpenESB使用XML格式的消息

您可以签出一些开源ESB-

JMS实现就像内置了骆驼一样。

  • 上述列表中增加了最新的开源ESB-

JMS不太适合于REST服务、文件系统、S/FTP、电子邮件、Hessian、SOAP等的集成,使用支持这些类型的ESB可以更好地处理这些服务。例如,如果您有一个进程在午夜转储一个500MB的CSV文件,并且您希望另一个系统拾取该文件、解析CSV并导入到数据库中,这可以通过ESB轻松完成—而仅使用JMS的解决方案将是糟糕的。类似地,使用本机支持HTTP/S的ESB,可以更好地集成REST服务和负载平衡/故障切换到多个后端实例。

我想说,ESB就像是许多协议的门面……JMS就是其中之一。

这种转换不会自动发生。您需要配置映射或写入转换服务

问候,, 拉贾·纳甘德拉·库马尔, 狱警
www.tejasoft.com

JMS是一种用于与底层消息传递层通信的协议。ESB在更高的级别上运行,以统一的方式提供与多种技术和协议(其中一种是JMS)的集成,从而使复杂流的管理更加简单。

有JMS消息代理,您可以使用ESB轻松配置

JMS和ESB都提供了不同应用程序之间的通信方式但是JMS和ESB的上下文不同。JMS是为了满足简单的需要。JMS由JMS提供者实现。它是特定于Java的

JMS提供程序的示例有:ApacheActiveMQ、IBMMQ、HornetQ等

ESB用于满足复杂的需求ESB是EAI中的一个组件为各种应用程序提供通信功能它是通用的&不是特定于Java的。JMS是受支持的协议之一

ESB提供者的示例有:MuleESB、apachecamel、OpenESB


用例:如果我们所有的通信应用程序都是Java,并且使用相同的消息格式,那么使用ESB可能会增加开销。在这里,JMS可能就足够了。

我们当中的愤世嫉俗者会说JMS是一种特定的Java API,其中“ESB”是一个营销术语,涵盖了大量相关技术和设计方法,意义非常有限。@skaffman甚至一些目光敏锐的乐观主义者也可能同意您的观点;-)所以JMS只提供了基本的排队功能。ESB提供了更多的功能来管理这些队列、它们的订阅者和提供者,并且可以在底层基于JMS?或者ESB中除了这一点还有其他一些东西?关于“在总线中”应该做什么以及在ESB之外应该做什么,存在着一个完整的争论领域。不同的供应商有不同的答案。我认为最好从ESB开始,将其作为一套体系结构模式,然后看看您正在考虑的bits产品可以为您做些什么。。为此,不需要昂贵的ESB解决方案。ESB能够处理的任何更好、更复杂的用例都将是一个很好的候选者。