如何在Spring中为MQSeries创建TopicConnectionFactory?

Jam*_*ods 5 java spring ibm-mq

我已经阅读了有关配置QueueConnectionFactories的文章http://techtots.blogspot.com/2010/01/connecting-to-mq-using-spring-without.html,并让这方面的工作很好.

# MQ related values
mq.jms.qcf=QM_Epsilon
mq.jms.request.queue=TEST.REQUEST.QUEUE

# Connection details
mq.host.url=localhost:1414/SYSTEM.DEF.SVRCONN
mq.factoryclass=com.ibm.mq.jms.context.WMQInitialContextFactory

# Authentication details
mq.auth=simple
mq.user=******
mq.password=********
Run Code Online (Sandbox Code Playgroud)
<bean id="queueConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="${mq.jms.qcf}" />
    <property name="resourceRef" value="false" />
    <property name="jndiEnvironment">
        <props>
            <prop key="java.naming.factory.initial">${mq.factoryclass}</prop>
            <prop key="java.naming.provider.url">${mq.host.url}</prop>
            <prop key="java.naming.security.authentication">${mq.auth}</prop>
            <prop key="java.naming.security.principal">${mq.user}</prop>
            <prop key="java.naming.security.credentials">${mq.password}</prop>
        </props>
    </property>
</bean>
Run Code Online (Sandbox Code Playgroud)

使用此配置,queueConnectionFactory bean可以作为MQQueueConnectionFactory轻松注入到我的类中.

但我想使用发布/订阅模型,据我所知,我需要为此获取MQTopicConnectionFactory.我已经找遍和试过无数的事情,但我不能找到如何让我得到一个修改这个配置,或MQ安装的任何信息MQTopicConnectionFactory,而不是一个MQQueueConnectionFactory.

T.R*_*Rob 5

该类WMQInitialContextFactory通过 WebSphere MQ 队列实现 JNDI 提供程序。托管对象不是存储在 .bindings 文件或 LDAP 中,而是被序列化并存储在队列中,并且此类允许您将该队列视为另一个 JNDI 存储。此类仅旨在成为 JNDI 提供者,而不是实际 IBM JMS 实现的替代品。由于在主题上存储托管对象不起作用,因此这些类中没有主题工厂。这正如预期的那样。

在我看来,问题在于WMQInitialContextFactory它必须首先连接到 WebSphere MQ 才能获得连接工厂,然后连接工厂告诉应用程序(您猜对了)如何连接到 WebSphere MQ。这使得链接的文章令人困惑,因为似乎所有配置、WMQ 连接详细信息等都是为了应用程序的利益,而实际上它们只是引导一个 JNDI 提供程序,该提供程序预计已定义连接工厂对象所有这些相同的信息。

本文缺少的是,作者必须使用 IBM 的 JMSAdmin 工具连接到 MQInitialContext 并定义 ConnectionFactory 和其他受管理对象,然后才能将应用程序连接到同一初始上下文以便访问它们。

根据记录,WebSphere MQ JMS 类已经支持 JMS 1.1 ConnectionFactory 和 Destination 类已有相当长的一段时间了。在此之前,他们根据 JMS 1.0 规范支持队列和主题。

您可以下载 IBM WMQ JMS 实现作为SupportPac MQC7。除了 jar 文件之外,还有更多内容。例如,您可以获得大量示例代码、诊断和跟踪实用程序、文档等。您还可以获得正确的 jar 文件。

如果您想要使用 .bindings 文件(文件系统初始上下文)而不是WMQInitialContextFactory,请下载最新的 WebSphere MQ Explorer 工具SupportPac MS0T。您可以创建一个目录,将 WMQ Explorer 指向该目录并定义所有连接工厂和目标。(或者如果您喜欢老派,则使用特定于域的 QueueConnectionFactory 和 TopicConnectionFactory。)有关使用 WMQ Explorer 定义托管对象的更多信息可以在以下位置找到:创建和配置 JMS 管理对象

如果您想要一个包含如何使用 IBM 的 JMSAdmin 工具创建 .bindings 文件演示的教程,请查看在 WebSphere MQ V6.0 上运行独立的 Java 应用程序。(JMSAdmin 工具随 WMQ 服务器一起安装,我相信它还附带上面链接的免费 MS0T WMQ 客户端安装。)JMSAdmin 工具的文档位于此处:使用 WebSphere MQ JMS 管理工具

无论您选择哪种方法来创建托管对象,您都可以在以下位置查找 IBM 实现中支持的所有可能属性:Properties of WebSphere MQ classes for JMS objects