activeMq

466 阅读4分钟

apache的开源消息中间件

消息队列应用场景

应用解耦
异步调用
限流削峰

常见消息队列

ActiveMq(JDK,activeMq安装包)
优点:安装方便,只基于JVM实现跨平台;可以使用JDBC持久化到数据库;与JMS有统一的接口;支持自动重连;有安全机制可以对队列和主题进行权限认证;学习使用成本低
缺点:社区活跃度不高;不适应于大规模的场景

RabbitMq:(ErLang语言包RabbitMQ安装包)
优点:性能较好,高并发;有消息确认机制和持久化机制,可靠性高;管理页面比较丰富;
缺点:代理架构,消息发送到客户端之前可以在中央节点排队,中央节点增加了延迟;接口和协议比较复杂,学习成本较高。

RocketMq:(Java JDK 安装git、Maven RocketMQ安装包)
优点:高性能,高可靠,高实时,分布式;生产者,消费者,队列都可以分布式;单机支持一万以上的持久化队列;所有的消息都是持久化的,磁盘和内存中各一份,访问时从内存读取;模型简单,接口易用;性能非常好,可堆积大量消息;
缺点:支持语言不多,没有web管理页面

Kafka(Java JDK Kafka安装包)
优点:快速持久化,可以在O(1)的系统开销下进行消息持久化; 高吞吐,在一台普通的服务器上既可以达到10W/s的吞吐速率; .完全的分布式系统,Broker、Producer、Consumer都原生自动支持分布式,自动实现负载均衡;提供完全分布式架构, 并有replica机制, 拥有较高的可用性和可靠性, 理论上支持消息无限堆积; 支持批量操作; 消费者采用Pull方式获取消息, 消息有序, 通过控制能够保证所有消息被消费且仅被消费一次;
缺点: Kafka单机超过64个队列/分区,Load会发生明显的飙高现象,队列越多,load越高,发送消息响应时间变长 使用短轮询方式,实时性取决于轮询间隔时间; 消费失败不支持重试; 支持消息顺序,但是一台代理宕机后,就会产生消息乱序; 社区更新较慢;

特性

1、支持多种语言的客户端和协议
2、支持消息组通信,消息优先级,延迟接收,消息持久化等高级特性
3、支持JMS1.1和J2EE1.4的规范(包括持久化,分布式事务消息,事务)
4、对sping框架的支持,通过配置文件可以很容易的集成到基础框架中
5、提供点对点、发布订阅两种消息传输模式,点对点:一条消息只能被一个消费者消费;发布订阅类似于广播模式:广播之后,所有订阅者都会收到消息。

优点

跨平台(JAVA编写与平台无关有,ActiveMQ几乎可以运行在任何的JVM上)
可以用JDBC:可以将数据持久化到数据库。虽然使用JDBC会降低ActiveMQ的性能,但是数据库一直都是开发人员最熟悉的存储介质。将消息存到数据库,看得见摸得着。而且公司有专门的DBA去对数据库进行调优,主从分离;
支持JMS :支持JMS的统一接口;
支持自动重连;
有安全机制:支持基于shiro,jaas等多种安全配置机制,可以对Queue/Topic进行认证和授权。
监控完善:拥有完善的监控,包括Web Console,JMX,Shell命令行,Jolokia的REST API;
界面友善:提供的WebConsole可以满足大部分情况,还有很多第三方的组件可以使用,如hawtio;

主从模式

Master-Slave模式,只有Master提供服务,master挂掉后slave自动升级为master提供服务,基于共享文件或者数据库,各个实例去竞争锁,先获取到锁的成为master节点。

集群模式

集群+主从 实现负载均衡和高可用