我在一个新项目中工作。该项目包括使用 websphere MQ、Websphere 服务器。 我们在 Websphere MQ 中有队列,包括队列管理器。我们还在 Websphere 应用程序服务器中定义了队列和连接工厂。现在,我的问题是为什么我们需要在 websphere 应用服务器中创建队列和连接工厂,即使它们是在 WEBSPHERE MQ 中定义的。我们的应用程序不能直接使用在 Websphere MQ 中定义的队列吗?
请清除我的查询。提前致谢。
最佳答案
实际上,连接工厂未在WebSphere MQ 中定义。队列是,但它与您在 WAS 中创建的不同。
当使用 JMS 时,对象有两个接口(interface)。 JMS API 是代码和开发人员看到的接口(interface)。服务提供者接口(interface)是与特定 JMS 传输提供者交互的部分。它需要这两者来创建 JMS 对象,例如 QCF 或 Destination。
当您在 WAS(或任何 JNDI 存储库,就此而言)中创建一个对象定义时,创建的是一个程序可以引用的对象(JMS API 部分),但它也“知道”如何与以及特定的传输提供者(SPI 部分)。因此,当您在 WAS 中定义队列时,它是一个目录条目,指向传输提供程序中定义的实际物理队列,在本例中为 WebSphere MQ。同样,当您定义一个连接工厂时,它也不过是一个符合 JMS API 的目录条目,并且还“知道”如何使用其专有协议(protocol)和有线格式与传输提供者对话。在这种情况下,由于传输提供者是 WebSphere MQ,连接工厂目录条目必须了解 QMgr 名称、主机、端口、 channel 、SSL/TLS 详细信息等信息。
在某些情况下,应用服务器是传输提供者(即使用服务集成总线作为 JMS 传输的 WAS),在创建 JMS 对象定义的同时创建物理对象。
反之亦然。在 WebSphere MQ 中,当您使用 WebSphere MQ Explorer 创建队列或主题时,您有机会定义 JMS 对象定义,前提是您已将 WMQ Explorer 配置为与存储托管对象的存储库对话。例如,您可以使用 LDAP 来存储托管对象定义,将 WebSphere MQ Explorer 和 WAS 指向 LDAP 目录并管理那里的所有 JMS 对象。
重申一下,在 WAS 中定义 JMS 对象只会创建目录条目,而不是实际的 WMQ 对象。对于与 WAS 一起使用的任何外部 JMS 传输都是如此。
关于jms - WAS Server 和 websphere MQ 为什么需要队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13132293/