• 1. JMS消息中间件ActiveMQ简介李德志 lidezhi@baidu.com
  • 2. 报告提纲消息中间件及JMS基本概念 ActiveMQ基本概念 ActiveMQ安装、启动 编写基于ActiveMQ的应用程序 点对点 发布订阅 与Spring集成 ActiveMQ性能 ActiveMQ应用场景
  • 3. 消息中间件技术消息中间件(Message Oriented Middleware, MOM): 消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。 降低应用之间的藕合度
  • 4. JMS基本概念JMS(Java Messaging Service)是Java平台上有关面向消息中间件的技术规范,即Java消息服务。 JMS的基本构件 连接工厂(ConnectionFectory) 连接(Connection) 会话(Session) 目的地(Destination)—Queue,Topic 消息生产者(Producer) 消息消费者(MessageConsumer)------同步,异步 消息----消息头、消息属性、消息体 JMS定义的消息类型有TextMessage、MapMessage、BytesMessage、StreamMessage和ObjectMessage。
  • 5. 关系简图 ConnectionFactory-->Connection-->Session-->Message Destination + Session------------->Producer Destination + Session------------->MessageConsumer 在一个JavaEE环境中, ConnectionFactory和Destination可以通过JNDI查找得到, 如果在一个非JavaEE环境中, 只能通过JMS提供者提供的接口得到 JMS基本概念
  • 6. JMS简介JMS可靠性机制 JMS消息只有在被确认之后,才认为被成功地消费 消息的成功消费包含三个阶段:客户接收消息、客户处理消息和消息被确认 事务性会话:事务提交时确认自动发生 非事务性会话中,消息何时被确认取决于创建会话时的应答模式(acknowledgement mode)三个可选值: Session.AUTO_ACKNOWLEDGE Session.CLIENT_ACKNOWLEDGE Session.DUPS_ACKNOWLEDGEJMS基本概念
  • 7. JMS 持久性 两种消息提交模式: PERSISTENT JMS Provider挂了,重启,未被消费的消息仍然存在 缺省的持久化存储中,消息保存在Data Logs中,由一些单独的data log文件组成,默认大小为32m NON_PERSISTENT---不要求JMS provider持久保存消息 优先级 10个级别,从0(最低)到9(最高),默认级别是4 JMS provider并不一定保证按照优先级的顺序提交消息 消息过期 可设置消息在一定时间后过期,默认为永不过期 只有在这个有效期内,消息消费者才可以消费这个消息 JMS基本概念
  • 8. JMS本地事务 可将一系列操作组成一个事务,若一个操作失败,事务会被回滚,并可以尝试重新执行这一组操作。若这一组操作都成功,事务则会被提交 jms api 中的 Session 接口提供了 commit 和 rollback 方法来提交回滚事务 创建会话时可以指定会话是否为事务 JMS基本概念
  • 9. 几种消息中间件IBM MQSeries IBM MQ系列产品提供的服务使得应用程序可以使用消息队列进行相互交流,通过一系列基于Java的API,提供了MQSeries在Java中应用开发的方法。它支持点到点和发布/订阅两种消息模式,在基本消息服务的基础上增加了结构化消息类,通过工作单元提供数据整合等内容。 WebLogic WebLogic是BEA公司实现的基于工业标准的J2EE应用服务器,支持大多数企业级JavaAPI,它完全兼容JMS规范,支持点到点和发布/订阅消息模式,它具有以下一些特点: 1) 通过使用管理控制台设置JMS配置信息; 2) 支持消息的多点广播; 3) 支持持久消息存储的文件和数据库; 4) 支持XML消息,动态创建持久队列和主题。
  • 10. SonicMQ 提供JMS规范的完全实现,支持点到点消息模式和发布/订阅消息模式; 支持层次安全管理; 确保消息在Internet上的持久发送; 动态路由构架(DRA)使企业能够通过单个消息服务器动态的交换消息; 支持消息服务器的集群。 OpenJMS 支持点到点模型和发布/订阅模型; 支持同步与异步消息发送; 可视化管理界面,支持Applet; 能够与Jakarta Tomcat这样的Servlet容器结合; 支持RMI、TCP、HTTP与SSL协议几种消息中间件
  • 11. 几种消息中间件RabbitMQ 实现了AMQP( Advanced Message Queuing Protocol) 协议的消息中间件 AMQP功能层:定义了可用于支持事务存储的命令,发布/订阅模式以及批处理文件传输的消息风格 AMQP传输层:覆盖了有线通讯(wire communication),通道多路技术(channel multiplexing),framing,内容编码,heart-beating,数据表现以及错误处理 性能优良
  • 12. ActiveMQ基本概念ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现 特性 多种语言和协议编写客户端: Java, C, C++, C#, Ruby, Perl, Python, PHP。应用协议: OpenWire,Stomp REST,WS Notification,XMPP,AMQP 完全支持JMS1.1和J2EE 1.4规范 (持久化,XA消息,事务) 对Spring的支持,ActiveMQ可以很容易内嵌到使用Spring的系统里面去,而且也支持Spring2.0的特性 通过了常见J2EE服务器(如 Geronimo,JBoss 4, GlassFish,WebLogic)的测试,其中通过JCA 1.5 resource adaptors的配置,可以让ActiveMQ可以自动的部署到任何兼容J2EE 1.4 商业服务器上 支持多种传送协议:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA 支持通过JDBC和journal提供高速的消息持久化
  • 13. ActiveMQ基本概念Broker 启动activeMQ,即启动一个Broker Transport VM Transport TCP transport Failover Transport 重联机制 支持多个borker同时提供服务
  • 14. ActiveMQ集群Queue consumer clusters Broker clusters Master slave clusters
  • 15. Queue consumer clusters ActiveMQ支持订阅同一个queue的consumers上的集群。 如果一个consumer失效,那么所有未被确认(unacknowledged)的消息都会被发送到这个 queue上其它的 consumers。 如果某个 consumer 的处理速度比其它 consumers 更快,那么这个 consumer 就会消费更多的消息。 Consumer1Consumer2Consumer3 Brokerclusterproducer
  • 16. Broker clusters 如果某broker失效,会自动重连到其它的broker ActiveMQ中使用failover://协议实现 ActiveMQ 支持 networks of brokersConsumer1Broker1clusterBroker2Consumer2producer
  • 17. Master Slave ClusterPure Master Slave Shared File System Master Slave JDBC Master Slave Consumer1Master BrokerclusterSlave BrokerConsumer2producer
  • 18. ActiveMQ安装与启动安装 http://activemq.apache.org/download.html下载最新版本apache-activemq-5.2.0 release 解压apache-activemq-5.2.0-bin.tar.gz(用于linux),windows下可直接解压在activemq的解压目录下 启动 输入bin/activemq启动activemq(用于linux),windows下可直接双击activemq.bat即可
  • 19. 编写基于ActiveMQ的应用程序消息产生者向JMS发送消息的步骤: 创建连接使用的工厂类JMS ConnectionFactory 使用管理对象JMS ConnectionFactory建立连接Connection 使用连接Connection 建立会话Session 使用会话Session和管理对象Destination创建消息生产者MessageSender 使用消息生产者MessageSender发送消息 消息消费者从JMS接受消息的步骤: 创建连接使用的工厂类JMS ConnectionFactory 使用管理对象JMS ConnectionFactory建立连接Connection 使用连接Connection 建立会话Session 使用会话Session和管理对象Destination创建消息消费者MessageReceiver 使用消息消费者MessageReceiver接受消息,需要用setMessageListener将MessageListener接口绑定到MessageReceiver 消息消费者必须实现MessageListener接口,需要定义onMessage事件方法
  • 20. DEMO点对点 发布订阅 与Spring集成
  • 21. ActiveMQ性能测试配置: 点对点模型,failover方式,非事务 布署: jx-fc-rd00.jx上安装activeMQ,并布署接收消息客户端 tc-fc-rd00.tc上布署发送消息客户端,消息类型为TextMessage 试验次数:6
  • 22. (本页无文本内容)
  • 23. ActiveMQ性能测试
  • 24. ActiveMQ性能测试测试机上的性能消耗 在测试机上接收消息时,CPU的空闲率使终在70%之上,另外物理内存的变化情况不大,因此ActiveMQ对机器的性能消耗较小,可以接受。 平均接收时间 在可靠的前提下,如果发送字符串消息,测得activeMQ的每次请求的接收平均时间为2.1-2.2ms左右。可以看到,增大线程数,或者缩短发送的时间间隔并没有减小它每次请求的接收时间。另外,经查阅ActiveMQ的技术文档可知,ActiveMQ使用了流量控制,这点在折线图中体现得很明显。在每次实验中,接收消息数为2-3万,5-6万,8-9万等区间,接收消息速度明显放慢。
  • 25. 凤巢应用场景由触发器产生的事件 涉及到排队的场景
  • 26. Thank you! Q&A