java - JMS 如何与服务总线相关

标签 java architecture jms activemq apache-camel

我正努力全神贯注于 JMS,并一直在阅读一些非常有帮助的内容 sourcesexamples .我现在正试图看到这里的“大局”,并将 JMS 背后的所有理论置于使用真实企业技术的实际环境中。

enter image description here

所以这里我们有四个元素:(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 是一个 Camel 端点。正确吗?
  3. EIP:Camel - Camel 是 EIP 的一种实现。首先了解什么是 EIP 对于我理解整个设置也很重要。
  4. EIP:JMS - 虽然这两者之间可能没有直接联系,但似乎消息传递是 EIP 的核心,而 JMS 是 Java 的消息传递基础。这是一个公平的评估吗?
  5. 我留下了 EIP:ActiveMQ 和 JMS:Camel 之间的关系,以防这些系统之间有任何我应该注意的“大概念”。

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

最佳答案

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

希望对您有所帮助。

关于java - JMS 如何与服务总线相关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8099366/

相关文章:

java - JBoss EAP 6.1 无法在 Eclipse Mars 中启动

java - 用 mockito 模拟构造函数

php - 将数组输出转换为对象的最佳策略?

architecture - 设置层之间的依赖反转

java - Apache ActiveMQ Artemis 客户端可以连接到现有的 ActiveMQ "Classic"5.15.x 代理吗?

java - 拆分数组列表和文本文件

java - 使用 javax.json.stream.JsonParser 和 Java 流解析的 JSON 字符串值的额外引号

php - 电子邮件解析和处理架构

unit-testing - 如何使用 Java DSL 测试 Camel JMS 路由

java - 我应该在哪里打开/关闭 JSF ManagedBean 中的 JMS 连接?