【发布时间】:2016-01-09 04:15:04
【问题描述】:
我正在使用 Spring 和 Websphere MQ 进行发布/订阅。 经过几次测试,我可以:
- 通过 API 在主题上创建非持久订阅并使用消息
- 通过 API 创建主题的持久订阅并使用消息
我现在的目标是订阅管理订阅。 使用 Websphere Explore,我创建了与本地队列关联的管理订阅 -> 好的
在我的应用程序中,我想订阅此管理订阅。 我正在使用与上面第 2 步相同的配置:
<!-- 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>
如果我不创建订阅,此配置将在队列管理器中使用此名称创建订阅:
JMS:<Queue Manager>:<Client ID>:<subscription name>
而且,我可以消费消息。
现在,如果我在 Websphere Explorer 中创建了订阅,我认为相同的配置也可以正常工作。 其实结果是我在执行过程中没有报错,但是我消费不了消息。
我正在关注这个tutorial,以便在我的 MQ 管理器中创建我的不同对象。
所以,我的问题是:
- 是否可以以管理方式订阅?
- 如果是,如何使用 Spring 来做到这一点?
- 如果不是,还有哪些其他解决方案?
我可以直接连接到与管理订阅关联的队列,但我认为这不是一个好的解决方案。
【问题讨论】:
标签: spring jms ibm-mq subscribe