Spring Websphere MQ 7:如何订阅管理订阅?

时间:2015-12-09 14:22:23

标签: spring jms ibm-mq subscribe

我使用Spring与Websphere MQ进行发布/订阅。 经过几次测试,我可以:

  1. 通过API为主题创建非持久性订阅并使用消息
  2. 通过API为主题创建持久订阅并使用消息
  3. 我现在的目标是订阅管理订阅。 通过Websphere Explore,我创建了与本地队列关联的管理订阅 - >行

    在我的应用程序中,我想要依据此行政订阅。 我使用与上面步骤2相同的配置:

    import numpy as np
    
    minCorAgua = (108,110,115)
    maxCorAgua = (166,163,162)
    
    bool_pixels = np.all(((imagem>minCorAgua) & (imagem<maxCorAgua)), axis = 2)
    imagem[bool_pixels] = (255, 255, 255)
    

    如果我没有创建订阅,此配置将在队列管理器中使用以下名称创建订阅:

    <!-- producer ibmConnectionFactory -->
    <bean id="ibmConnectionFactory" class="com.ibm.mq.jms.MQConnectionFactory">
        <property name="transportType" value="1" />
        <property name="connectionNameList" value="myHostname(1414)" />
        <property name="channel" value="CH_CYD_CON" />
        <property name="clientId" value="client1" />
    </bean>
    
     <bean id="cachedConnectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
        <property name="targetConnectionFactory" ref="ibmConnectionFactory" />
    </bean>
    
     <bean id="emailListener" class="com.myapp.jms.listener.EmailListener">
    </bean>
    
    <bean id="smsListener" class="com.myapp.jms.listener.SMSListener">
    </bean>
    
     <jms:listener-container connection-factory="singleConnectionFactory" destination-type="durableTopic" transaction-manager="transactionManager"
        acknowledge="transacted" destination-resolver="jmsDestResolver" container-type="default" client-id="client1">
        <jms:listener id="newsEmailListener" destination="News" ref="emailListener" method="onMessage" subscription="EmailSubscription" />
        <jms:listener id="newsSmsListener" destination="News" ref="smsListener" method="onMessage" subscription="SMSSubscription" />
    </jms:listener-container>
    

    而且,我可以使用消息。

    现在,如果我在Websphere Explorer中创建了订阅,我认为它将起到相同的配置作用。 事实上,结果是我在执行期间没有错误,但我不能使用这些消息。

    我正在关注此tutorial,以便在我的MQ管理器中创建我的不同对象。

    所以,我的问题是:

    • 是否可以订阅管理订阅?
    • 如果是的话,如何用Spring做到这一点?
    • 如果不是,还有什么其他解决方案?

    我可以直接连接到与管理订阅相关联的队列,但我认为这不是一个好的解决方案。

2 个答案:

答案 0 :(得分:1)

由于在Spring框架下使用JMS与MQ交谈,问题在于JMS主要用于完全托管订阅,其创建由客户端代码启动。

可以从JMS使用管理订阅 - 关键是在Explorer中正确创建订阅名称以匹配MQ JMS客户端正在创建的订阅名称。

technote中提供了有关语法的信息。查看JMS在您工作的情况下创建的动态订阅的名称也很有帮助。如果恰好有一个相同的名称 - JMS将重新打开该订阅。

有一个RFE可以让这个更容易使用 - 请随意添加您的声音。

答案 1 :(得分:0)

管理订阅的目的是允许只能读取队列的应用程序接收在主题上发布的消息。这样的订阅应该由MQ管理员永久创建,以允许应用程序读取目标队列以获取在订阅所针对的主题上发布的消息。

如果您的应用程序能够直接订阅主题,则无需管理订阅即可接收消息。

您可以通过PCF消息(http://www-01.ibm.com/support/knowledgecenter/SSFKSJ_7.5.0/com.ibm.mq.ref.adm.doc/q087050_.htm)以编程方式创建管理订阅,但您不需要。

相关问题