我正在一个新项目中工作。该项目包括使用 websphere MQ、Websphere 服务器。我们在 Websphere MQ 中有队列,包括队列管理器。我们还在 websphere 应用服务器中定义了队列和连接工厂。现在,我的问题是为什么我们需要在 websphere 应用程序服务器中创建队列和连接工厂,即使它们是在 WEBSPHERE MQ 中定义的。我们的应用程序不能直接使用 Websphere MQ 中定义的队列吗?
请清除我的查询。提前谢谢你。
实际上,连接工厂并没有在 WebSphere MQ 中定义。队列是,但它与您在 WAS 中创建的不同。
使用 JMS 时,对象有两个接口。JMS API 是代码和开发人员看到的接口。服务提供者接口是与特定 JMS 传输提供者交互的部分。需要这两者来创建 JMS 对象,例如 QCF 或 Destination。
当您在 WAS(或任何 JNDI 存储库,就此而言)创建对象定义时,创建的是程序可以引用的对象(JMS API 部分),但它也“知道”如何与特定的传输提供者对话以及(SPI部分)。因此,当您在 WAS 中定义队列时,它是一个目录条目,指向在传输提供者(在本例中为 WebSphere MQ)中定义的实际物理队列。类似地,当您定义连接工厂时,它也不过是一个符合 JMS API 的目录条目,并且还“知道”如何使用其专有协议和有线格式与传输提供者对话。在这种情况下,因为传输提供者是 WebSphere MQ,所以连接工厂目录条目必须知道 QMgr 名称、主机、端口、通道、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 传输。