为啥在 WAS Server 和 websphere MQ 中需要队列?

Posted

技术标签:

【中文标题】为啥在 WAS Server 和 websphere MQ 中需要队列?【英文标题】:why need queue in WAS Server and websphere MQ?为什么在 WAS Server 和 websphere MQ 中需要队列? 【发布时间】:2012-10-19 09:31:42 【问题描述】:

我正在一个新项目中工作。该项目包括使用 websphere MQ、Websphere 服务器。 我们在 Websphere MQ 中有队列,包括队列管理器。我们还在 websphere 应用程序服务器中定义了队列和连接工厂。现在,我的问题是为什么我们需要在 websphere 应用程序服务器中创建队列和连接工厂,即使它们是在 WEBSPHERE MQ 中定义的。我们的应用程序不能直接使用 Websphere MQ 中定义的队列吗?

请清除我的查询。提前谢谢。

【问题讨论】:

Websphere 和Websphere MQ 是两个不同的产品,就像 IIS 和 MSMQ 曾经是两个不同的产品一样。 是的,好的,但我们不能从 Java 应用程序直接连接到 Websphere MQ 以发送消息吗? 【参考方案1】:

实际上,连接工厂没有在 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 传输。

【讨论】:

解释得很好。谢谢!

以上是关于为啥在 WAS Server 和 websphere MQ 中需要队列?的主要内容,如果未能解决你的问题,请参考以下文章

websphere(was)应用部署

Eclipse 远程调试 WebSphere Application Server (WAS)

(转)websphere内存溢出,手动导出was的phd和javacore文件

websphere(was)控制台用户密码修改(适用于忘记控制台密码)

使用资源从 Websphere Application Server 导出 EAR

有没有办法在 IBM WebSphere Application Server 上使用 WebSockets?