设置ActiveMQ桥以连接到MOM

时间:2015-05-22 12:39:36

标签: jms activemq ibm-mq tibco-ems

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

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

虽然示例很少,而且往往很少,因此我需要在我的类路径和桥接配置中包含来自每个此类实现(Weblogic,WebsphereMQ,TIBCO EMS等)的jms客户端jar,这一点令人困惑。这可以在没有任何这样的罐子的情况下完成吗?

由于目标是连接到单独的组织MOM,我希望避免使用任何第三方,可能是许可的jar。

3 个答案:

答案 0 :(得分:5)

  

......混淆的一点是我是否需要包含JMS客户端jar   来自每个这样的实现(Weblogic,Websphere MQ,TIBCO EMS等)   在我的类路径和桥接配置中。这可以不做任何事情   这样的罐子?

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

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

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

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

当然有许多"陷阱"用这种方法。我将列出一些显而易见的内容:

  • 跨供应商映射目的地是手动的。
  • 身份传播不具有可执行性,并且要求网桥具有准管理权限或完全管理权限。
  • 提供商之间的交易最多是困难的,最糟糕的是不可能。
  • 如果相关标识符完全映射,则它们必须由桥映射。这使得桥更复杂,并且需要它使用数据库或其他持久存储。
  • 特定于供应商的类通常具有JMS规范指定的属性和方法的超集。如果使用,则在复制过程中将其剥离。
  • 由于信息分段,分组和其他亲缘关系,整个桥可能没有1:1的相关性。
  • 由于高可用性等实现的差异,一个传输提供商的物理网络结构可能不会将1:1映射到另一个传输提供商的物理网络结构。这往往会将桥梁功能限制为两种运输工具中最简单的共同点。
  • 通用桥梁提出的问题包括两方桥梁的所有问题,作为支持的运输数量的指数而提出。因此,如果2个传输桥很难x,那么出于规划目的,假设5个传输桥很难(x)**5

不要说"不要编码桥梁"因为这些非常有用。请注意,这不是一项微不足道的任务。

答案 1 :(得分:1)

至少在IBM MQ端,我担心这是不可能的。 JMS只是一个API,每个提供商都可以按照他们认为适合的方式自由实现它(正如你所说的那样,它不是一个有线协议)。提供者jar对于连接到JMS产品至关重要。

答案 2 :(得分:0)

我们有一个名为虚拟目的地的概念,尝试