activemq-cpp开发手册Word格式文档下载.doc
《activemq-cpp开发手册Word格式文档下载.doc》由会员分享,可在线阅读,更多相关《activemq-cpp开发手册Word格式文档下载.doc(56页珍藏版)》请在冰豆网上搜索。
消息在broker上的目的地
Queue:
消息队列
Topic:
主题
Message:
消息
Producer:
消息产生者
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;