我想部署ActiveMQ以便与其他mms实现的jms连接和通信,例如WebsphereMQ,Tibco EMS,Oracle WebLogic JMS等。
就我在网上研究而言,这似乎可以通过在activemq之上构建一个能够与另一端通信的所谓的桥,而不管每个jms实现使用的底层线协议。
虽然示例很少,而且往往很少,因此我需要在我的类路径和桥接配置中包含来自每个此类实现(Weblogic,WebsphereMQ,TIBCO EMS等)的jms客户端jar,这一点令人困惑。这可以在没有任何这样的罐子的情况下完成吗?
由于目标是连接到单独的组织MOM,我希望避免使用任何第三方,可能是许可的jar。
答案 0 :(得分:5)
......混淆的一点是我是否需要包含JMS客户端jar 来自每个这样的实现(Weblogic,Websphere MQ,TIBCO EMS等) 在我的类路径和桥接配置中。这可以不做任何事情 这样的罐子?
TL; DR:您需要供应商的专有类。
JMS定义API并将有线格式和其他实现细节留给传输供应商。此外,在专有实现中,有线格式可以显着改变版本。 (专有代码的一个优点是能够在这样做时进行如此大的结构更改,从而提高性能,可靠性或功能。)
两个JMS实现具有通用性的一个地方是消息在内存中。由于所有传输供应商的实现都继承自相同的Java JMS类,因此通常可以从两个不同的传输供应商实例化消息对象并从一个传输供应商复制到另一个。为此,必须拥有每个支持的传输提供程序的jar。
事实上,这就是我使用过的大多数JMS桥接产品的工作方式。桥接代码使用完全限定的类名来引用来自两个不同供应商的类。然后它创建两个连接工厂,每个传输一个,两个不同的目的地,每个传输一个。然后,它从一个提供程序的队列中读取消息,将其复制到另一个传输提供程序上的消息对象,然后写入消息。
当然有许多"陷阱"用这种方法。我将列出一些显而易见的内容:
x
,那么出于规划目的,假设5个传输桥很难(x)**5
。不要说"不要编码桥梁"因为这些非常有用。请注意,这不是一项微不足道的任务。
答案 1 :(得分:1)
至少在IBM MQ端,我担心这是不可能的。 JMS只是一个API,每个提供商都可以按照他们认为适合的方式自由实现它(正如你所说的那样,它不是一个有线协议)。提供者jar对于连接到JMS产品至关重要。
答案 2 :(得分:0)
我们有一个名为虚拟目的地的概念,尝试