• 1. ActiveMQ 相关介绍及实践底层开发组 刘锐 2013-12-11
  • 2. 问题2为什么要使用ActiveMQ 什么是queue,什么是topic? 什么时候用queue,什么时候用topic? ActiveMQ使用过程中那么多配置,ConnectionFactory, Destination等等都是干啥的? 我的程序到底发出去没啊?
  • 3. 目录3 应用背景 JMS标准介绍 ActiveMQ介绍及使用 公司使用现状
  • 4. 需求4系统间异步交互需求 系统间生命周期解耦需求 系统负载缓冲需求 传输可靠需求(数据不能丢失、不能重复传递)
  • 5. 消息中间件5消息中间件 MOM Message-Oriented Middleware 利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。
  • 6. 消息中间件6MOM 系统较为困难的问题是 MOM 作为专用产品来实现。要解决此问题,需要一个标准的消息传送接口。 SUN推出的 Java 消息服务规范(Java Message Service, JMS) 消息服务协议:OpenWire、STOMP协议、AMQP协议
  • 7. JMS7JMS(Java Messaging Service) 是面向消息中间件的技术规范,它便于消息系统中的应用程序进行消息交换,并且通过提供标准的产生、发送、接收消息的接口简化企业应用的开发 Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持
  • 8. JMS8JMS的基本构件 连接工厂ConnectionFactory 连接Connection 会话Session 目的地Destination 消息生产者Producer 消息消费者Consumer 消息Message
  • 9. JMS时序9
  • 10. JMS10JMS的可靠性机制 确认机制 持久性 优先级 消息过期 持久订阅 本地事务
  • 11. MQ系统11ActiveMQ HornetQ RabbitMQ Kafka MetaQ MSMQ WebSphere MQ
  • 12. ActiveMQ12ActiveMQ — 能力强劲的开源消息总线。 ActiveMQ 是一个完全支持JMS和J2EE 规范的JMS Provider实现。
  • 13. ActiveMQ 13语多种言和协议编写客户端。语言: Java, C, C++, C#, Ruby, Perl, Python, PHP。应用协议: OpenWire,Stomp REST,WS Notification,XMPP,AMQP 完全支持JMS1.1和J2EE 1.4规范 ActiveMQ可以很容易内嵌到使用Spring的系统里面去 支持多种传送协议:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA 支持消息持久化 从设计上保证了高性能的集群,客户端-服务器,点对点 支持与Axis的整合
  • 14. ActiveMQ 14持久化存储,KahaDB、JDBC 异步发送(强制同步:不使用事务并且发送持久消息 ) 消息预取(预取限制(prefetch size)为0表示消费者将不停的轮询是否有更多的需要处理的消息,以替代推送消息到消费者的模式,pool消费者问题 ) 消息游标,vmCursor/fileCursor 流量控制, 死信队列,7次重发 多目的地址 Queue queue = new ActiveMQQueue("FOO.A,topic://NOTIFY.FOO.A");
  • 15. ActiveMQ运维故事15基本稳定5.4.3 pure Master/slave使用量少,个别应用使用,多为topic宕机不断5.4.3 pure Master/slave大量消息涌入,服务宕机连接数暴增,大量close_wait稳定5.4.3 pure Master/slave统一修改客户端配置,连接数稳定优化服务配置,增加堆内存、事务、DLQ、过期时间等;统一客户端配置;添加监控升级5.7.0 share file Master/slave升级版本及主从方式,使用netapp存储迁移至物理机多为Queue升级至25.10.0升级版本,解决三版本间大量bug,kahabb存储引擎升级解决大量文件io问题文件锁问题
  • 16. 16使用现状部署:文件共享主从模式 连接数: Queue数: Topic数: 消息量: 存储: CPU load:
  • 17. Queue/Topic17Queue是点对点模型。PTP( Point-to-Point ) 消息从一个生产者传送至一个消费者。在此传送模型中,目标是一个队列。消息的生产者和消费者之间没有时间上的依赖,发送客户端可以在 任何时刻发送信息到目标队列,而不需要知道接收客户端是不是在运行 。如果在消息发送的时候没有可用的消费者,那么它将被保存一直到能处理该消息的消费者可用。如果一个消费者收到一条消息后却不响应它,那么这条消息将被转到另一个消费者那儿。每条消息只能发送至、并由一个消费者成功消费。
  • 18. Queue/Topic 18Pub/Sub(使用 Topic即主题目标) 消息从一个生产者传送至任意数量的消费者。在此传送模型中,目标是一个主题每个消息可以发送至任意数量的订阅消费者。主题目标支持持久订阅的概念。持久订阅表示消费者已向主题目标进行注册,但在消息传送时此消费者可以处于非活动状态。当此消费者再次处于活动状态时,它将接收此信息。如果没有已经向主题目标注册的消费者,主题不保留其接收到的消息,除非有非活动消费者注册了持久订阅
  • 19. ActiveMQ应用发散19虚拟queue,对queue进行自动路由处理(camel) 服务端插件,进行数据进行监控和计数 异步转同步(QueueRequestor/TopicRequestor) 集群化,去主从 多级AMQ分流,纯静态路由(伪集群)
  • 20. 20使用规范Thank u!