欢迎来到天天文库
浏览记录
ID:37848777
大小:123.00 KB
页数:11页
时间:2019-06-01
《MQ C++API编程》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、11.5用C++API编程现在,我们将阐述如何利用上述API来实现基本的WebSphereMQ操作,如连接到队列管理器、打开一个队列或发送/接收消息。11.5.1连接到队列管理器为了连接到队列管理器,我们将使用ImqQueueManager类(它包括WebSphereMQ队列管理器对象)。队列管理器名可以由构造器调用提供,也可以用ImqQueueManager类的setName方法来提供。ImqQueueManagerqmanager;qmanager.setName(name);或者ImqQueueManager*pmanager=newImqQueu
2、eManager(name);提示:我们在本章其余部分中都将用到qmanager对象。而后,我们可以利用ImqQueueManager的连接方法来建立连接。qmanager.connect();队列管理器的信息可以利用ImqQueueManager类来访问。11.5.2打开WebSphereMQ对象我们可以根据对象是队列还是其他类型的对象,然后利用ImqObject或ImqQueue类来打开WebSphereMQ对象。一般来说,我们都会使用ImqQueue类,除非必须要查询或设定某些对象属性。l打开队列ImqQueue类包括WebSphereMQ队列对象
3、,并向队列对象行为添加了某些信息。在可以对队列进行任何放置或获取操作前,必须利用ImqQueue类的setConnectionReference方法将包含队列的队列管理器分配给ImqQueue对象。ImqQueuepqueue;pqueue.setConnectionReference(pmanager);可在对象构建过程中提供队列名,也可以利用ImqObject类的setName方法提供队列名。pqueue.setName(queuename);当发出放置或获取调用时,将自动采用要求的选项打开队列,也就是说,不需要进行显式打开操作。如果实际的打开选项不
4、符合在队列上进行操作的要求的话,那么ImqQueue对象就会关闭并重新打开队列。在某些情况下,根据被打开队列的类型,将会导致一些额外的开销或某些问题。为了避免自动关闭和重新打开队列,我们必须利用ImqObject类的openFor方法或setOpenOptions直接设置打开选项。我们也可以利用ImqObject类的打开方法显式打开队列,但是如果打开选项已经指定的话,那么较之于这种接口提供的隐式打开,它并不能提供什么重大优势。pqueue.setOpenOptions(MQOO_OUTPUT
5、MQOO_INPUT_SHARED);或者pqueue.ope
6、nFor(MQOO_OUTPUT
7、MQOO_INPUT_SHARED);openFor方法不断添加指定的打开选项到实际分配给对象的选项。ImqQueue对象的默认打开选项是MQOO_INQUIRE。l打开动态队列动态队列不能通过重新打开方式自动关闭,因为对动态队列进行关闭操作会删除该队列。因此,打开动态队列时,我们必须指定打开选项。队列模型的名由ImqObject类的setName方法指定,动态队列名或其前缀可以用ImqQueue类的setDynamicQueueName方法确定。动态队列的实际名可以在队列打开后用dynamicQueueName方法获得
8、。pqueue.setDynamicQueueName(dynamicqueuename);l打开分布列表分布列表由ImqDistributionList类进行管理,它继承自ImqQueue类。可以利用ImqQueue类的setDistributionReference方法将任意数量的ImqQueue对象和一个ImqDistributionList对象关联起来。在打开分布列表之前,相关联的队列必须分配到队列名和包含队列的队列管理器,下面提供了一个打开分布列表的例子:ImqDistributionListdlist;ImqQueuequeueA,queue
9、B;ImqStringqueueManagerName(pmanager.name());queueA.setConnectionReference(pmanager);queueB.setConnectionReference(pmanager);queueA.setName(queuename1);queueB.setName(queuename2);queueA.setQueueManagerName(queueManagerName);queueB.setQueueManagerName(queueManagerName);queueA.setD
10、istributionListReference(dlist);queueB.s
此文档下载收益归作者所有