消息系统——ActiveMQ & JMS
来源:互联网 发布:济宁淘宝培训 编辑:程序博客网 时间:2024/05/22 17:02
《大型分布式网站架构设计与实践》
消息系统
在分布式系统中,消息系统的应用十分广泛,消息可以作为应用间通信的一种方式。消息被保存到队列中,知道被接收者取出。由于消息发送者不需要同时等待消息接收者的响应,消息的异步接收降低了系统集成的耦合度,提升了分布式系统协作的效率,使得系统能够更快的响应用户,提供更高的吞吐。当系统处于峰值压力时,分布式消息队列还能作为缓冲,销锋填谷,缓解集群的压力,避免整个系统被压垮。
开源的消息系统有很多,包括Apache的ActiveMQ、Apache的Kafka、RabbitMQ、memcacheQ等。
ActiveMQ & JMS
ActiveMQ 采用java来实现,因此他能很好地支持javaEE提出的JMS规范。JMS规范(Java Message Service,既java消息服务)是一组Java应用程序接口。他提供消息的创建、发送、接收、读取等一系列服务。JMS定义了一组公开应用程序接口和相应的语法,类似于java数据库的统一访问接口JDBC,他是一种与厂商无关的API,使得java程序能够与不同厂商的消息组件很好地进行通信。
JMS支持的消息类型包括简单文本、可序列化对象、键值对、字节流、流,以及无有效负载的消息等。消息的发送是异步的,因此,消息的发布者发送完消息之后,不需要等待消息接收者立即响应,这样便提高了分布式系统协作的效率。
JMS支持两种消息发送和接收模型。一种称为Point-to-Point(P2P模型),既采用点到点的方式发送消息。P2P模型是基于队列的,消息生产者发送消息到队列,消息消费者从队列中接收消息,队列的存在使得消息的异步传输成为可能,P2P模型在点对点的情况下进行消息的传递时使用。另一种称为pub/sub(Publish/Subscribe,既发布/订阅)模型,发布/订阅模型定义了如何向一个内容节点发布和订阅消息,这个内容节点称为topic(主题),主题可以认为是消息传递的中介,消息发布者将消息发布到某个主题,而消息订阅者则从主题订阅消息。主题使得消息的订阅者与消息的发布者互相保持独立,不需要进行接触即可保证消息的传递,发布/订阅模型在消息的一对多广播时采用。
ActiveMQ 集群部署
针对分布式环境下对系统高可用的严格要求,以及面临高并发的用户访问,海量消息发送等场景的挑战,单个ActiveMQ 实例往往难以满足系统高可用与容量扩展的需求,这时ActiveMQ 的高可用方案及集群部署就显得十分重要了。
当一个应用被部署到生产环境中,进行容错和避免单点故障是十分重要的,这样可以避免因为单个节点的不可用而导致整个系统的不可用。目前,ActiveMQ 所提供的高可用方案主要是基于Master-Slave模式实现的冷备方案,较为常用的包括基于共享文件系统的Master-Slave架构和基于共享数据库的Master-Slave架构。
当系统规模不断的发展,产生和消费者消息的客户端越来越多,并发的请求数以及发送的消息量不断增加,使得系统逐渐地不堪重负。采用垂直扩展可以提升ActiveMQ单broker的处理能力。扩展最直接的方法就是提升硬件性能,如提高CPU和内存的能力,这种方式最为简单也最为直接。在这就是通过调节ActiveMQ本身的一些配置来提升系统的并发处理能力,如使用nio代替阻塞I/O,提高系统处理并发请求的能力,或者调整JVM与ActiveMQ可用内存空间。
硬件的性能毕竟不能无限制的提升,垂直扩展到一定程度时,必然会遇到瓶颈,这时需要对系统进行相应的水平扩展。对于ActiveMQ来说,可以采用broker拆分的方式,将不相关的queue和topic拆分到多个broker,来达到提升系统吞吐能力的目的。
- 消息系统——ActiveMQ & JMS
- ActiveMQ学习笔记(2)——JMS消息模型
- ActiveMQ学习笔记(6)——JMS消息类型
- ActiveMQ学习笔记(2)——JMS消息模型
- ActiveMQ学习笔记(6)——JMS消息类型
- JMS之——ActiveMQ消息持久化
- ActiveMQ学习笔记(2)——JMS消息模型
- JMS消息服务器 ActiveMQ
- JMS消息服务器 ActiveMQ
- JMS消息服务-ActiveMQ
- jms-activemq消息队列
- JMS——Spring+ActiveMQ
- JMS实战——ActiveMQ
- ActiveMQ系列—JMS规范
- JMS之消息队列 ActiveMQ
- JMS消息队列之ActiveMQ
- JMS消息传送机制ActiveMQ
- JMS-ActiveMQ:Java消息服务
- 2.18
- nips《tagger-deep-unsupervised-perceptual-grouping 》翻译
- Android快速开发,十个最常用的框架
- 解决linux 百度网盘大文件不能下载或者速度慢问题
- HDU1560 DNA sequence IDA* + 强力剪枝 [kuangbin带你飞]专题二
- 消息系统——ActiveMQ & JMS
- 原语
- select2 4.0.3 空记录时的处理
- pat 1110. Complete Binary Tree (25)
- Bootstrap table 刷新回调陷入死循环
- MongoDB中distinct的详细用法
- Android系统架构
- 静态库和动态库
- 文件系统 Proc