在IBM MQ中创建topic完成pub/sub通信的问题

悬赏:20 发布时间:2008-07-03 提问人:dzmonkey (初级程序员)

目的是在was中配置mq的连接工厂和目标和MQ通信,queue部分都已经实现了,但是在尝试topic时出现了问题:
mq中没有类似queue一样的topic对象,它是通过broker实现发布/订阅的。我照着网上的资料用MQJMS_PSQ.mqsc创建并且启动了队列管理器的代理控制器

C:\Documents and Settings\Administrator>dspmqbrk -m QM_TTL   
队列管理器 QM_TTL 的 WebSphere MQ Publish/Subscribe 代理正在运行。
 

但是,mq里的topic是什么样的概念呢? 我如何创建一个topic呢?

在was配置主题连接工厂和主题目标时,主题目标里有一项是“基本主题名”,怎么填呢?



后续:(“基本主题名”里随便填了个mq里的队列名,瞎填的)
was启动时,显示jndi绑定成功,但是在启动jms发送程序发送message的时候,was错误:
[08-7-1 14:07:38:844 CST] 00000021 ConnectionEve A   J2CA0056I: 连接管理器接收到来自资源 JMS$mq.topic.cf$JMSManagedConnection@528635340 的资源适配器的致命连接错误。接收到的异常为 com.ibm.mq.jms.NoBrokerResponseException: MQJMS5053: *** 无代理程序响应。请确保代理程序正在运行。如果您正在使用 WebSphere MQ 代理程序,检查您的 brokerVersion 是否设置为 V1 ***   
[08-7-1 14:07:38:859 CST] 00000021 ConnectionEve A   J2CA0056I: 连接管理器接收到来自资源 mq/topic/cf 的资源适配器的致命连接错误。接收到的异常为 com.ibm.mq.jms.NoBrokerResponseException: MQJMS5053: *** 无代理程序响应。请确保代理程序正在运行。如果您正在使用 WebSphere MQ 代理程序,检查您的 brokerVersion 是否设置为 V1 ***   
[08-7-1 14:07:39:047 CST] 00000021 ServletWrappe E   SRVE0068E: 无法调用 servlet TestTopicServlet 的 service() 方法。抛出异常:org.springframework.jms.UncategorizedJmsException: Uncategorized exception occured during JMS processing; nested exception is com.ibm.mq.jms.NoBrokerResponseException: MQJMS5053: *** 无代理程序响应。请确保代理程序正在运行。如果您正在使用 WebSphere MQ 代理程序,检查您的 brokerVersion 是否设置为 V1 ***; nested exception is com.ibm.mq.MQException: MQJE001:完成码 2,原因码 2033  
Caused by: com.ibm.mq.jms.NoBrokerResponseException: MQJMS5053: *** 无代理程序响应。请确保代理程序正在运行。如果您正在使用 WebSphere MQ 代理程序,检查您的 brokerVersion 是否设置为 V1 ***   
    at com.ibm.mq.jms.MQPubSubServices.getBrokerResponse(MQPubSubServices.java:443)   
    at com.ibm.mq.jms.JMSServicesMgr.getBrokerResponse(JMSServicesMgr.java:173)   
    at com.ibm.mq.jms.MQMessageProducer.checkBrokerResponse(MQMessageProducer.java:2685)   
    at com.ibm.mq.jms.MQMessageProducer.publish(MQMessageProducer.java:1882)   
    at com.ibm.mq.jms.MQTopicPublisher.publish(MQTopicPublisher.java:222)   
    at com.ibm.mq.jms.MQMessageProducer.send(MQMessageProducer.java:976)   
    at com.ibm.mq.jms.MQMessageProducer.send(MQMessageProducer.java:1056)   
    at com.ibm.ejs.jms.JMSMessageProducerHandle.send(JMSMessageProducerHandle.java:1169)   
    at org.springframework.jms.core.JmsTemplate.doSend(JmsTemplate.java:538)   
    at org.springframework.jms.core.JmsTemplate.doSend(JmsTemplate.java:515)   
.......   
---- Begin backtrace for Nested Throwables   
com.ibm.mq.MQException: MQJE001:完成码 2,原因码 2033  
    at com.ibm.mq.MQQueue.getMsg2(MQQueue.java:989)   
    at com.ibm.mq.jms.MQPubSubServices.getBrokerResponse(MQPubSubServices.java:410)   
    at com.ibm.mq.jms.JMSServicesMgr.getBrokerResponse(JMSServicesMgr.java:173)   
    at com.ibm.mq.jms.MQMessageProducer.checkBrokerResponse(MQMessageProducer.java:2685)   
    at com.ibm.mq.jms.MQMessageProducer.publish(MQMessageProducer.java:1882)   
    at com.ibm.mq.jms.MQTopicPublisher.publish(MQTopicPublisher.java:222)   
    at com.ibm.mq.jms.MQMessageProducer.send(MQMessageProducer.java:976)   
........   
 
谁能帮帮忙阿?
问题补充:
回复“baallee”:

“BASIC.TOPIC.NAME”这个jndi是在was中配置的啊,那么这个配置怎么做呢?

was中配置主题目标时,有一项是“基本主题名”,怎么填呢?

问题补充:
回复“lijie250 ”:
java代码呢?

采纳的答案

2008-07-03 baallee (初级程序员)

IBM MQ 无须在服务器中设定TOPIC
在程序运行时指定你期望的“基本主题名”

spring的配置可能就是这样
 <bean id="ibmTopicDestination"
        class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiTemplate">
            <ref local="ibmJndi"/>
        </property>
        <property name="jndiName">
            <value>BASIC.TOPIC.NAME</value>
        </property>
    </bean>

MQ 会为你创建 TOPIC 并管理他。

提问者对于答案的评价:
一直很忙,没来得及尝试。
谢谢回复。

其他回答

Base topic name
WebSphere MQ 的 MA0C 代理中的主题名称。这个名称是任意的,但应该是唯一的和描述性的主题名称。

你可以用这个:
ExampleTopic
baallee (初级程序员) 2008-07-03
lijie250 (高级程序员) 2008-07-05