【问题标题】:How JMS Relates to Service BusesJMS 如何与服务总线相关联
【发布时间】:2011-11-12 20:53:15
【问题描述】:

我正在尝试将我的大脑包裹在 JMS 上,并且一直在阅读一些非常有用的 sourcesexamples。我现在试图在这里看到“大局”,并将 JMS 背后的所有理论置于使用真正企业技术的实际环境中。

所以这里我们有四个元素:(1) JMS - 用于MOM 的 Java API,(2) ActiveMQ - 众多 JMS 实现之一,( 3) EIP - 我才刚刚开始了解的一种有趣而神秘的野兽,最后,(4) Apache Camel,该野兽的开源实现。

我现在正在尝试将这些组件关联在一起,以查看 JMS(以及通常的企业级消息传递)的实际应用。

我想我要寻找的第一件事是对 EIP 的定义简单明了。它们似乎是 MOM 应该如何表现的一整套设计模式,但由于我一开始对消息传递的概念已经模糊,这只是在对某些已经模糊的理解之上添加的更模糊的定义非常核心的概念。

即使我没有“了解”什么是 EIP,我也确实“了解”了 Camel、Mule 和 ServiceMix 等框架实现它们并允许服务器端组件(“端点”)有效地相互发送消息。

对这个问题最重要的是我对这四个组成部分如何相互关联的理解。我认为理解这一点将帮助我连接大部分点;好吧,无论如何重要的。

所以在上图中,我标记了所有 6 种可能的关系,并在下面引用它们:

  1. JMS:ActiveMQ - 我理解 ActiveMQ 是 JMS 的实现,就像 Hibernate 是 JPA 的实现一样。这是正确的吗?
  2. ActiveMQ:Camel - Camel 能够将消息推送到任何 JMS 实现,例如 ActiveMQ。在这种情况下,ActiveMQ 是一个骆驼端点。正确吗?
  3. EIP:Camel - Camel 是 EIP 的一种实现。首先了解什么是 EIP 对于我理解整个设置也很重要。
  4. EIP:JMS - 尽管这两者之间可能没有直接联系,但似乎消息传递是 EIP 的核心,而 JMS 是 Java 的消息传递基础。这是一个公平的评估吗?
  5. 我保留了 EIP:ActiveMQ 和 JMS:Camel 之间的关系,以防这些系统之间存在我应该注意的任何“大概念”。

非常感谢任何有助于为 EIP 定义简单易懂的定义以及了解所有这些组件如何相互关联的帮助。提前致谢!

【问题讨论】:

    标签: java architecture jms activemq apache-camel


    【解决方案1】:
    1. ActiveMQ 是 MOM 的实现。它提供了 JMS API 的客户端实现,供 JVM 语言使用。 JMS 只是一个 API,但实现与它们通过有线格式与之通信的任何代理相关联,因此您不能使用 ActiveMQ JMS 实现与 WebsphereMQ 通信。还有其他 API 可以从其他语言平台与 ActiveMQ 对话——通过 CMS 的 C/C++,通过 NMS 的 .Net。您还可以通过其他“非 JMS”机制与 ActiveMQ 通信,例如通过具有 Ruby、Javascript 等客户端库的 STOMP 协议。
    2. 是的。
    3. 是和不是。 Camel 使用与 EIP 相同的“语言”,因此通过使用 Camel,您自然会选择 EIP。话虽如此,了解它们可以让您知道您在 API 中寻找什么。我推荐 Camel in Action 以更好地了解这两者,如果您想获得更多信息,请参阅 EIP 站点 (http://www.eaipatterns.com/)。
    4. 再次是和否。有许多通过消息传递实现的模式(JMS 只是一种风格),但也有大量具有更广泛应用的模式(例如拆分器、聚合器)。查看 EIP 站点索引以了解这一点。
    5. Camel 可以使用它的 JMS 组件与其他系统通信,该组件使用支持该 API(Websphere、Sonic、OpenMQ 等)的任何底层消息传递提供程序。它还可以讨论其他消息传递技术,例如支持 AMQP API 的技术。

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 2011-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-03
      • 2021-06-12
      • 2017-03-09
      相关资源
      最近更新 更多