activemq-cpp开发手册

上传人:re****.1 文档编号:509554564 上传时间:2022-09-21 格式:DOC 页数:84 大小:351KB
返回 下载 相关 举报
activemq-cpp开发手册_第1页
第1页 / 共84页
activemq-cpp开发手册_第2页
第2页 / 共84页
activemq-cpp开发手册_第3页
第3页 / 共84页
activemq-cpp开发手册_第4页
第4页 / 共84页
activemq-cpp开发手册_第5页
第5页 / 共84页
点击查看更多>>
资源描述

《activemq-cpp开发手册》由会员分享,可在线阅读,更多相关《activemq-cpp开发手册(84页珍藏版)》请在金锄头文库上搜索。

1、Activemq-cpp开发手册丁靖2008-05-061 引言1.1 编写目的快速学习CMS,提高CMS开发效率,提供一个CMS开发参考手册详细API手册请参考1.2 功能介绍Activemq-cpp是一个与ActiveMQ交互通讯的C+ API开发库,为C+开发者提供了一个访问ActiveMQ的接口。Winkeemq-cpp是一个在Activemq-cpp基础上封装的API库,对一些重复机械的初始化及销毁清除及一些不关心的细节进行了封装,从而简化了编程。1.3 术语解析ActiveMQ :开源的消息队列服务器Broker :消息中介,每个消息队列服务器中至少有一个broker,是消息队列的

2、载体Destination :消息在broker上的目的地Queue :消息队列 Topic :主题 Message :消息 Producer :消息产生者 Consumer :消息消费者Client :客户端,生产者和消费者都在客户端上 Server :Activemq服务器BrokerUri :客户端访问服务器上broker时的Uri其它资料请参考2 开发前准备在开发前必须先安装activemq-cpp及winkeemq-cpp库,具体步骤参考activemq-cpp安装及使用文档.doc3 CMS 3.1 概述CMS(stands for C+ Messaging Service)是一组

3、C+应用程序接口(C+ API),它提供创建、发送、接收、读取消息的服务。定义了一组和Sun公司和它的合作伙伴设计的CMS API相同的公共应用程序接口和相应语法,使得C+程序能够和其他消息组件进行通信。 CMS是一种与厂商无关的 API,用来访问消息收发系统。它类似于 JDBC (Java Database Connectivity):这里,JDBC 是可以用来访问许多不同关系数据库的 API,而 CMS 则提供同样与厂商无关的访问方法,以访问消息收发服务。CMS 使您能够通过消息收发服务(有时称为消息中介程序或路由器)从一个 CMS 客户机向另一个客户机发送消息。消息是 CMS 中的一种类

4、型对象,由两部分组成:报头和消息主体。报头由路由信息以及有关该消息的元数据组成。消息主体则携带着应用程序的数据或有效负载。根据有效负载的类型来划分,可以将消息分为几种类型,它们分别携带:简单文本 (TextMessage)、可序列化的对象 (ObjectMessage)、属性集合 (MapMessage)、字节流 (BytesMessage)、原始值流 (StreamMessage),还有无有效负载的消息 (Message)。 消息收发系统是异步的,也就是说,CMS 客户机可以发送消息而不必等待回应。比较可知,这完全不同于基于 RPC 的(基于远程过程的)系统,如 EJB 1.1、CORBA

5、和 Java RMI 的引用实现。在 RPC 中,客户机调用服务器上某个分布式对象的一个方法。在方法调用返回之前,该客户机被阻塞;该客户机在可以执行下一条指令之前,必须等待方法调用结束。在 CMS 中,客户机将消息发送给一个虚拟通道(主题或队列),而其它 CMS 客户机则预订或监听这个虚拟通道。当 CMS 客户机发送消息时,它并不等待回应。它执行发送操作,然后继续执行下一条指令。消息可能最终转发到一个或许多个客户机,这些客户机都不需要作出回应。 CMS的通用接口集合以异步方式发送或接收消息。异步方式接收消息显然是使用间断网络连接的客户 机,诸如移动电话和PDA的最好的选择。另外, CMS采用一

6、种宽松结合方式整合企业系统的方法,其主要的目的就是创建能够使用跨平台数据信息的、可移植的企业级应用程序,而把开发人力解放出来。CMS消息服务支持两种消息模型:Point-to-Point消息(P2P)和发布订阅消息(Publish Subscribe messaging,简称Pub/Sub)。CMS规范并不要求供应商同时支持这两种消息模型,但开发者应该熟悉这两种消息模型的优势与缺点。P2P消息模型是在点对点之间传递消息时使用。如果应用程序开发者希望每一条消息都能够被处理,那么应该使用P2P消息模型。与Pub/Sub消息模型不同,P2P消息总是能够被传送到指定的位置。Pub/Sub模型在一到多的

7、消息广播时使用。如果一定程度的消息传递的不可靠性可以被接受的话,那么应用程序开发者也可以使用Pub/Sub消息模型。换句话说,它适用于所有的消息消费程序并不要求能够收到所有的信息或者消息消费程序并不想接收到任何消息的情况。CMS通过允许创建持久订阅来简化时间相关性,即使消息预订者未激活也可以接收到消息。此外,使用 持久订阅还可通过队列提供灵活性和可靠性,而仍然允许消息被发给许多的接收者。 Topic Subscriber topic Subscriber = topicSession.createDurableSubscriber(topic, subscriptionName); Conne

8、ction对象表示了到两种消息模型中的任一种的消息系统的连接。服务器端和客户机端对象要求管理创建的CMS连接的状态。连接是由 Connection Factory创建的并且通过JNDI查寻定位。 /取得用于 P2P的 QueueConnectionFactory QueueConnectionFactory = queueConnectionFactory(); Context messaging = new InitialContext(); QueueConnectionFactory = (QueueConnectionFactory) Messaging.lookup(“QueueCo

9、nnectionFactory”); /取得用于 pub/sub的 TopicConnectionFactory TopicConnectonFactory topicConnectionFactory; Context messaging = new InitialContext(); topicConnectionFactory= (TopicConnectionFactory)messaging.lookup(“TopicConnectionFactory”); 注意:用于P2P的代码和用于PublishSubscribe的代码非常相似。如果session被标记为transactiona

10、l的话,确认消息就通过确认和校正来自动地处理。如果session没有标记为 transactional,你有三个用于消息确认的选项。 AUTO_ACKNOWLEDGE session将自动地确认收到一则消息。 CLIENT_ACKNOWLEDGE 客户端程 序将确认收到一则消息,调用这则消息的确认方法。 DUPS_OK_ACKNOWLEDGE 这个选项命令session“懒散的”确认消息传递,可以想到,这将导致消息提供者传递的一些复制消息可能会出错。这种确认的方式只应当用于消息消费程序 可以容忍潜在的副本消息存在的情况。 queueSession =queueConnection.create

11、QueueSession(false,session.AUTO_ACKNOWLEDGE);/P2P topicSession = topicConnection.createTopicSession(false, session.AUTO_ACKNOWLEDGE); /Pub-Sub注意:在本例中,一个session目的从连结中创建,非值指出session是non-transactional的,并且 session将自动地确认收到一则消息。CMS现在有两种传递消息的方式。标记为NON_PERSISTENT的消息最多投递一次,而标记 为PERSISTENT的消息将使用暂存后再转送的机理投递。如果

12、一个CMS服务离线,那么持久性消息不会丢失但是得等到这个服务恢复联机时才会被传递。 所以默认的消息传递方式是非持久性的。即使使用非持久性消息可能降低内务和需要的存储器,并且这种传递方式只有当你不需要接收所有的消息时才使用。虽然 CMS规范并不需要CMS供应商实现消息的优先级路线,但是它需要递送加快的消息优先于普通级别的消息。CMS定义了从0到9的优先级路线级别,0是最低 的优先级而9则是最高的。更特殊的是0到4是正常优先级的变化幅度,而5到9是加快的优先级的变化幅度。举例来说: topicPublisher.publish (message, DeliveryMode.PERSISTENT,

13、8, 10000); /Pub-Sub 或 queueSender.send(message, DeliveryMode.PERSISTENT, 8, 10000);/P2P 这个代码片断,有两种消息模型,映射递送方式是持久的,优先级为加快型,生存周期是10000 (以毫秒度量 )。如果生存周期设置为零,这则消息将永远不会过期。当消息需要时间限制否则将使其无效时,设置生存周期是有用的。CMS定义了五种不同的消息正文格式,以及调用的消息类型,允许你发送并接收以一些不同形式的数据,提供现有消息格式的一些级别的兼容性。 StreamMessage - Java原始值的数据流 MapMessage-一

14、套名称-值对 TextMessage-一个字符串对象 ObjectMessage-一个序列化的 Java对象 BytesMessage-一个未解释字节的数据流CMS应用程序接口提供用于创建每种类型消息和设置荷载的方法例如,为了在一个队列创建并发送一个 TextMessage实例,你可以使用下列语句: TextMessage message = queueSession.createTextMessage(); message.setText(textMsg); 以异步方式接收消息,需要创建一个消息监听器然后注册一个或多个使用MessageConsumer的CMS MessageListener

15、接口。会话(主题或队列)负责产生某些消息,这些消息被传送到使用onMessage方法的监听者那里。 Using namespace cms; class ExampleListener : public MessageListener /把消息强制转化为TextMessage格式 public void onMessage(Message message) TextMessage textMsg = null; / 打开并处理这段消息 当我们创建QueueReceiver和TopicSubscriber时,我们传递消息选择器字符串: /P2P QueueReceiver QueueReceiver receiver; receiver = session.createReceiver(queue, selector); /Pub-S

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 模板/表格 > 财务表格

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号