JMS和ESB - 它们是如何相关的?

时间:2011-03-16 08:28:33

标签: jms esb

对我来说,JMS和ESB似乎是非常相关的东西,我试图了解它们之间的关系。

我看过一句话,JMS可以用作ESB的传输 - 那么除了传输之外的其他什么应该存在于这样的ESB中? JMS是一个简单的ESB,或者如果不是,那么真正的ESB缺少什么?

8 个答案:

答案 0 :(得分:31)

JMS提供了一组用于消息传递的API:将消息放在队列中,其他人稍后,可能在地理上很远的地方将消息从队列中取出并处理它。我们已经将消息提供者和消费者的时间和位置分离。即使消息消费者恰好关闭了一段时间,我们也可以继续制作消息。

JMS还提供发布/订阅功能,生产者将消息放入“主题”,任何感兴趣的人都可以订阅该主题,在生成消息时接收消息,但目前只关注队列capabilty。

我们已将提供者与消费者之间关系的某些方面脱钩。但是仍然有一些耦合。首先,就目前而言,每条消息都以相同的方式处理。假设我们想为不同类型的消息引入不同类型的处理:

 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工作时,我最熟悉WebSphere ESB

答案 1 :(得分:5)

我认为ESB就像许多协议的外观...... JMS就是其中之一。

答案 2 :(得分:2)

  • 以上列表中的新增内容是最新的开源ESB - UltraESB

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

答案 3 :(得分:1)

除了JMS之外,ESB还提供了许多不同协议的集成。
大多数人在幕后使用JMS来传输,存储和移动消息。一种这样的解决方案OpenESB使用XML格式消息。

您可以结帐的开源ESB -

ActiveMQ这样的JMS实现伴随着Camel内置。

答案 4 :(得分:1)

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

查看https://access.redhat.com/knowledge/docs/en-US/JBoss_Enterprise_SOA_Platform/4.2/html/SOA_ESB_Message_Transformation_Guide/ch02s03.html

此致 Raja Nagendra Kumar, C.T.O www.tejasoft.com

答案 5 :(得分:0)

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

答案 6 :(得分:0)

有JMS消息代理,您可以使用ESB轻松配置。 https://docs.wso2.com/display/ESB470/JMS+Transport

答案 7 :(得分:0)

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

JMS提供程序的示例包括:Apache Active MQ,IBM MQ,HornetQ等。

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

ESB提供程序的示例有:MuleESB,Apache Camel,OpenESB

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