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