【问题标题】:How do I create a TopicConnectionFactory for MQSeries in Spring?如何在 Spring 中为 MQSeries 创建 TopicConnectionFactory?
【发布时间】:2011-07-12 21:56:59
【问题描述】:

我已阅读有关配置 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=********

<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>

使用此配置,queueConnectionFactory bean 很容易作为 MQQueueConnectionFactory 注入到我的类中。

但我想使用发布/订阅模型,据我了解,我需要为此获取一个 MQTopicConnectionFactory。我到处搜索并尝试了很多东西,但我找不到有关如何修改此配置或 MQ 安装的任何信息,以便我得到 MQTopicConnectionFactory 而不是 MQQueueConnectionFactory

【问题讨论】:

    标签: java spring ibm-mq


    【解决方案1】:

    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 定义托管对象的更多信息,请访问:Creating and configuring JMS administered objects

    如果您需要包含演示如何使用 IBM 的 JMSAdmin 工具来创建 .bindings 文件的教程,请查看 Running a standalone Java application on WebSphere MQ V6.0。 (JMSAdmin 工具随 WMQ 服务器一起安装,我相信它还附带上面链接的免费 MS0T WMQ 客户端安装。)JMSAdmin 工具的文档在这里:Using the WebSphere MQ JMS administration tool

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

    【讨论】:

    • "下载最新的 WebSphere MQ Explorer 工具..." 谢谢。很多例子都提到了这个,但是当它不在客户端下载时,我认为它只在服务器中可用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-17
    • 1970-01-01
    • 2011-02-21
    • 2014-01-29
    • 2021-06-25
    • 2015-01-22
    相关资源
    最近更新 更多