gpt4 book ai didi

jms - 设置 ActiveMQ 桥以连接到 MOM 的不同实现

转载 作者:行者123 更新时间:2023-12-01 15:45:20 25 4
gpt4 key购买 nike

我想部署 ActiveMQ 以便与 jms 的其他 MOM 实现(例如 WebsphereMQ、Tibco EMS、Oracle WebLogic JMS 等)连接和通信。

就我在网上的研究而言,这似乎可以通过在 activemq 之上构建一个所谓的桥接器来实现,该桥接器将能够与另一端通信,而不管每个 jms 实现使用的底层有线协议(protocol)如何。

虽然示例很少,而且通常很少,所以一个混淆点是我是否需要在我的类路径和桥接配置中包含来自每个此类实现(Weblogic、WebsphereMQ、TIBCO EMS 等)的 jms 客户端 jar。没有任何此类 jar 可以完成吗?

由于目标是连接到单独的组织 MOM,因此我想避免使用任何第 3 方、可能获得许可的 jar。

最佳答案

...a point of confusion is whether I need to include JMS client jars from each such implementation (Weblogic, Websphere MQ, TIBCO EMS etc) in my classpath and bridge configuration. Can this be done without any such jars?

TL;DR:您需要供应商的专有类。

JMS 定义 API 并将有线格式和其他实现细节留给传输供应商。此外,在专有实现中,有线格式可以在版本之间发生显着变化。 (专有代码的优势之一是能够在提高性能、可靠性或功能时进行如此大的结构更改。)

两个 JMS 实现的共同点是消息在内存中。由于所有传输供应商的实现都继承自相同的 Java JMS 类,因此通常可以实例化来自两个不同传输供应商的消息对象并从一个传输供应商复制到另一个。为此,您必须拥有每个支持的传输提供程序的 jar。

事实上,这就是我使用过的大多数 JMS 桥接产品的工作方式。桥代码使用完全限定的类名来引用来自两个不同供应商的类。然后它创建两个连接工厂,每个连接工厂一个,每个运输一个,还有两个不同的目的地,每个运输也一个。然后,它从一个提供程序的队列中读取消息,将其复制到另一个传输提供程序的消息对象,然后写入消息。

这种方法当然有很多“陷阱”。我将列出一些明显的:

  • 跨提供商映射目的地是手动的。
  • 身份传播不可强制执行,需要网桥具有准或完全管理员权限。
  • 供应商之间的交易充其量是困难的,最坏的情况是不可能的。
  • 相关标识符必须由桥映射,如果它们被映射的话。这使得网桥更加复杂,并且需要它使用数据库或其他持久性存储。
  • 特定于供应商的类通常具有 JMS 规范指定的属性和方法的超集。如果使用,这些将在复制过程中被剥离。
  • 由于消息分段、分组和其他相关性,桥接之间可能不会存在 1:1 的相关性。
  • 由于在实现高可用性等方面存在差异,一个传输提供商的物理网络结构可能无法 1:1 映射到另一个传输提供商的物理网络结构。这往往会将桥接功能限制为两种传输方式中最简单的公分母。
  • 通用网桥引发的问题包括 2 方网桥的所有问题,以支持的传输数量的指数形式提出。因此,如果 2 座运输桥的难度为 x,则出于规划目的,假设 5 座运输桥的难度为 (x)**5

这并不是说“不要编写桥梁代码”,因为事实证明它们非常有用。请注意,这不是一项微不足道的任务。

关于jms - 设置 ActiveMQ 桥以连接到 MOM 的不同实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30396970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com