activemq-cpp开发手册Word文档格式.doc

上传人:wj 文档编号:350427 上传时间:2023-04-28 格式:DOC 页数:56 大小:181KB
下载 相关 举报
activemq-cpp开发手册Word文档格式.doc_第1页
第1页 / 共56页
activemq-cpp开发手册Word文档格式.doc_第2页
第2页 / 共56页
activemq-cpp开发手册Word文档格式.doc_第3页
第3页 / 共56页
activemq-cpp开发手册Word文档格式.doc_第4页
第4页 / 共56页
activemq-cpp开发手册Word文档格式.doc_第5页
第5页 / 共56页
activemq-cpp开发手册Word文档格式.doc_第6页
第6页 / 共56页
activemq-cpp开发手册Word文档格式.doc_第7页
第7页 / 共56页
activemq-cpp开发手册Word文档格式.doc_第8页
第8页 / 共56页
activemq-cpp开发手册Word文档格式.doc_第9页
第9页 / 共56页
activemq-cpp开发手册Word文档格式.doc_第10页
第10页 / 共56页
activemq-cpp开发手册Word文档格式.doc_第11页
第11页 / 共56页
activemq-cpp开发手册Word文档格式.doc_第12页
第12页 / 共56页
activemq-cpp开发手册Word文档格式.doc_第13页
第13页 / 共56页
activemq-cpp开发手册Word文档格式.doc_第14页
第14页 / 共56页
activemq-cpp开发手册Word文档格式.doc_第15页
第15页 / 共56页
activemq-cpp开发手册Word文档格式.doc_第16页
第16页 / 共56页
activemq-cpp开发手册Word文档格式.doc_第17页
第17页 / 共56页
activemq-cpp开发手册Word文档格式.doc_第18页
第18页 / 共56页
activemq-cpp开发手册Word文档格式.doc_第19页
第19页 / 共56页
activemq-cpp开发手册Word文档格式.doc_第20页
第20页 / 共56页
亲,该文档总共56页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

activemq-cpp开发手册Word文档格式.doc

《activemq-cpp开发手册Word文档格式.doc》由会员分享,可在线阅读,更多相关《activemq-cpp开发手册Word文档格式.doc(56页珍藏版)》请在冰点文库上搜索。

activemq-cpp开发手册Word文档格式.doc

消息产生者

Consumer:

消息消费者

Client:

客户端,生产者和消费者都在客户端上

Server:

Activemq服务器

BrokerUri:

客户端访问服务器上broker时的Uri

2其它资料请参考开发前准备

在开发前必须先安装activemq-cpp及winkeemq-cpp库,具体步骤参考《activemq-cpp安装及使用文档.doc》

3CMS

3.1概述

CMS(standsforC++MessagingService)是一组C++应用程序接口(C++API),它提供创建、发送、接收、读取消息的服务。

定义了一组和Sun公司和它的合作伙伴设计的CMSAPI相同的公共应用程序接口和相应语法,使得C++程序能够和其他消息组件进行通信。

 

CMS是一种与厂商无关的API,用来访问消息收发系统。

它类似于JDBC(JavaDatabaseConnectivity):

这里,JDBC是可以用来访问许多不同关系数据库的API,而CMS则提供同样与厂商无关的访问方法,以访问消息收发服务。

CMS使您能够通过消息收发服务(有时称为消息中介程序或路由器)从一个CMS客户机向另一个客户机发送消息。

消息是CMS中的一种类型对象,由两部分组成:

报头和消息主体。

报头由路由信息以及有关该消息的元数据组成。

消息主体则携带着应用程序的数据或有效负载。

根据有效负载的类型来划分,可以将消息分为几种类型,它们分别携带:

简单文本(TextMessage)、可序列化的对象(ObjectMessage)、属性集合(MapMessage)、字节流(BytesMessage)、原始值流(StreamMessage),还有无有效负载的消息(Message)。

消息收发系统是异步的,也就是说,CMS客户机可以发送消息而不必等待回应。

比较可知,这完全不同于基于RPC的(基于远程过程的)系统,如EJB、CORBA和JavaRMI的引用实现。

在RPC中,客户机调用服务器上某个分布式对象的一个方法。

在方法调用返回之前,该客户机被阻塞;

该客户机在可以执行下一条指令之前,必须等待方法调用结束。

在CMS中,客户机将消息发送给一个虚拟通道(主题或队列),而其它CMS客户机则预订或监听这个虚拟通道。

当CMS客户机发送消息时,它并不等待回应。

它执行发送操作,然后继续执行下一条指令。

消息可能最终转发到一个或许多个客户机,这些客户机都不需要作出回应。

  CMS的通用接口集合以异步方式发送或接收消息。

异步方式接收消息显然是使用间断网络连接的客户机,诸如移动电话和PDA的最好的选择。

另外,CMS采用一种宽松结合方式整合企业系统的方法,其主要的目的就是创建能够使用跨平台数据信息的、可移植的企业级应用程序,而把开发人力解放出来。

  CMS消息服务支持两种消息模型:

Point-to-Point消息(P2P)和发布订阅消息(PublishSubscribemessaging,简称Pub/Sub)。

CMS规范并不要求供应商同时支持这两种消息模型,但开发者应该熟悉这两种消息模型的优势与缺点。

  P2P消息模型是在点对点之间传递消息时使用。

如果应用程序开发者希望每一条消息都能够被处理,那么应该使用P2P消息模型。

与Pub/Sub消息模型不同,P2P消息总是能够被传送到指定的位置。

  Pub/Sub模型在一到多的消息广播时使用。

如果一定程度的消息传递的不可靠性可以被接受的话,那么应用程序开发者也可以使用Pub/Sub消息模型。

换句话说,它适用于所有的消息消费程序并不要求能够收到所有的信息或者消息消费程序并不想接收到任何消息的情况。

CMS通过允许创建持久订阅来简化时间相关性,即使消息预订者未激活也可以接收到消息。

此外,使用持久订阅还可通过队列提供灵活性和可靠性,而仍然允许消息被发给许多的接收者。

TopicSubscribertopicSubscriber=(topic,subscriptionName);

  Connection对象表示了到两种消息模型中的任一种的消息系统的连接。

服务器端和客户机端对象要求管理创建的CMS连接的状态。

连接是由ConnectionFactory创建的并且通过JNDI查寻定位。

stop();

stop();

应用需要用到的属性;

2.消息头中原有的一些可选属性;

3.CMSProvider需要用到的属性。

标准的CMS消息头包含以下属性:

CMSDestination--消息发送的目的地

CMSDeliveryMode--传递模式,有两种模式:

PERSISTENT和NON_PERSISTENT,PERSISTENT表示该消息一定要被送到目的地,否则会导致应用错误。

NON_PERSISTENT表示偶然丢失该消息是被允许的,这两种模式使开发者可以在消息传递的可靠性和吞吐量之间找到平衡点。

CMSMessageID唯一识别每个消息的标识,由CMSProvider产生。

CMSTimestamp一个消息被提交给CMSProvider到消息被发出的时间。

CMSCorrelationID用来连接到另外一个消息,典型的应用是在回复消息中连接到原消息。

CMSReplyTo提供本消息回复消息的目的地址。

CMSRedelivered如果一个客户端收到一个设置了CMSRedelivered属性的消息,则表示可能该客户端曾经在早些时候收到过该消息,但并没有签收(acknowledged)。

CMSType消息类型的识别符。

CMSExpiration消息过期时间,等于QueueSender的send方法中的timeToLive值或TopicPublisher的publish方法中的timeToLive值加上发送时刻的GMT时间值。

如果timeToLive值等于零,则CMSExpiration被设为零,表示该消息永不过期。

如果发送后,在消息过期时间之后消息还没有被发送到目的地,则该消息被清除。

CMSPriority消息优先级,从0-9十个级别,0-4是普通消息,5-9是加急消息。

CMS不要求CMSProvider严格按照这十个优先级发送消息,但必须保证加急消息要先于普通消息到达。

消息体(Body)-CMSAPI定义了4种消息体格式,也叫消息类型,你可以使用不同形式发送接收数据并可以兼容现有的消息格式,下面描述这4种类型:

消息类型

消息体

TextMessage

string对象,如xml文件内容

MapMessage

名/值对的集合,名是string对象,值类型可以是c++任何基本类型

BytesMessage

字节流

ObjectMessage

对象类型

Message

没有消息体,只有消息头和属性。

下例演示创建并发送一个TextMessage到一个队列:

TextMessagemessage=();

(msg_text);

构造函数

SimpleProducer(conststd:

:

string&

brokerURI,

unsignedintnumMessages,

conststd:

destURI,

booluseTopic=false,

boolclientAck=false){

connection=NULL;

session=NULL;

destination=NULL;

producer=NULL;

this->

numMessages=numMessages;

useTopic=useTopic;

brokerURI=brokerURI;

destURI=destURI;

clientAck=clientAck;

initialize();

}

virtual~SimpleProducer(){

cleanup();

3.1.1初始化及销毁

try{

if(destination!

=NULL)deletedestination;

}catch(CMSException&

e){();

}

destination=NULL;

if(producer!

=NULL)deleteproducer;

producer=NULL;

try{

if(session!

=NULL)session->

close();

if(connection!

=NULL)connection->

=NULL)deletesession;

session=NULL;

=NULL)deleteconnection;

connection=NULL;

}

3.1.2生产一个消息并发送到队列中

public:

voidsend(){

构造函数

SimpleAsyncConsumer(conststd:

conststd:

booluseTopic=false,

boolclientAck=false){

consumer=NULL;

this->

initialize();

virtual~SimpleAsyncConsumer(){

3.1.3初始化及销毁

private:

3.1.4从消息队列中异步接收消息

如果队列中有消息到来,程序会自动调用onMessage函数,因此只需要在onMessage()中编写对消息的处理。

onMessage()函数中的message参数在onMessage()返回后便会自动销毁,可以通过调用Message的clone()方法拷贝自身来扩展其生命周期,clone()返回的是在椎上分配的消息,因此需要手动销毁。

virtualvoidonMessage(constMessage*message){

staticintcount=0;

try

{

count++;

Returns:

newcopyofthismessage

3.1.4.1virtualvoidcms:

Message:

acknowledge()constthrow(CMSException)[purevirtual]

Acknowledgesallconsumedmessagesofthesessionofthisconsumedmessage.

AllconsumedCMSmessagessupporttheacknowledgemethodforusewhenaclienthasspecifiedthatitsCMSsession'

sconsumedmessagesaretobeexplicitlyacknowledged.Byinvokingacknowledgeonaconsumedmessage,aclientacknowledgesallmessagesconsumedbythesessionthatthemessagewasdeliveredto.

Callstoacknowledgeareignoredforbothtransactedsessionsandsessionsspecifiedtouseimplicitacknowledgementmodes.

Aclientmayindividuallyacknowledgeeachmessageasitisconsumed,oritmaychoosetoacknowledgemessagesasanapplication-definedgroup(whichisdonebycallingacknowledgeonthelastreceivedmessageofthegroup,therebyacknowledgingallmessagesconsumedbythesession.)

Messagesthathavebeenreceivedbutnotacknowledgedmayberedelivered.

3.1.4.2virtualvoidcms:

clearBody()[purevirtual]

Clearsoutthebodyofthemessage.

Thisdoesnotcleartheheadersorproperties.

3.1.4.3virtualvoidcms:

clearProperties()[purevirtual]

Clearsoutthemessagebody.

Clearingamessage'

sbodydoesnotclearitsheadervaluesorpropertyentries.

Ifthismessagebodywasread-only,callingthismethodleavesthemessagebodyinthesamestateasanemptybodyinanewlycreatedmessage.

3.1.4.4Virtualstd:

vector<

std:

string>

cms:

getPropertyName()const[purevirtual]

Retrievestheproperynames.

Returns:

Thecompletesetofpropertynamescurrentlyinthismessage.

3.1.4.5virtualboolcms:

propertyExists(conststd:

string&

name)const[purevirtual]

Indicateswhetherornotagivenpropertyexists.

Parameters:

name Thenameofthepropertytolookup.

Trueifthepropertyexistsinthismessage.

3.1.4.6virtualboolcms:

getBooleanProperty(conststd:

name)constthrow(CMSException)[purevirtual]

Getsabooleanproperty.

name Thenameofthepropertytoretrieve.

Thevalueforthenamedproperty.

Exceptions:

CMSException ifthepropertydoesnotexist.

3.1.4.7virtualunsignedcharcms:

getByteProperty(conststd:

Getsabyteproperty.

3.1.4.8virtualdoublecms:

getDoubleProperty(conststd:

Getsadoubleproperty.

3.1.4.9virtual

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2