热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

从ActiveMQ认识JMS

随着分布式系统的规模和复杂度提高,往往会出现如下问题:(1)系统间同步通信,客户端发出调用后,必

           随着分布式系统的规模和复杂度提高,往往会出现如下问题:(1)系统间同步通信,客户端发出调用后,必须等到服务对象完成处理并返回结果后才能继续执行;(2)服务端和客户端强耦合,后端一旦出现故障,前台将会牵扯进来;(3)客户的一次调用只能发送给单独目标对象。在这样的环境下,面向消息的中间件就应运而生了。


      1. 什么是消息中间件?有什么特点?


       很容易理解,消息中间件,就是将程序从一个程序传送到另一个或者多个应用程序。突出的特点为:


       (1)消息异步传输,降低多系统间的耦合度


       (2)消息可靠接收,使用事务,确保接收方收到消息后才取消消息,多个消息可以组成原子事务


      2. 什么是JMS?有什么优势特性?


         JMS定义了java中访问消息中间件的接口!优势特性:


        (1)可靠性机制:只有被确认,才能成功消费。消息会话机制分为两种:一是事务性会话,事务提交,成功消费自动提交;二是非事务性会话,包含三种会话应答模式:AUTO_ACKNOWLEDGE自动确认,客户端发送和接收不需要额外操作;CLIENT_ACKNOWLEDGE,客户端接收消息后,必须调用javax.jms.Message的acknowledge方法才能确认消息消费成功;DUPS_OK_ACKNOWLEDGE允许副本确认模式,接收方应用程序方法调用从处理消息处返回,会话对象就会确认消息接收,且允许重复确认。


        (2)持久性机制:如果为persistent,即使jms provider挂了,重启,未被消费的消息任然存在,且默认情况下就是持久化存储。如果为non_persistent,则不要求JMS provider持久保存消息。


       (3)优先级机制:10个,从0到9,默认为4,但JMS Provider有时候并不会按照优先级顺序提交消息。


       (4)消息过期机制:可设置一定时间后自动过期,只有在有效时间内,消费者才可以消费消息。


       (5)本地事务:一组操作均完成后才能提交。


        3. 常用的消息队列有哪几种?各有什么优缺点?


        经常使用的JMS有ActiveMQ,RabbitMQ,RocketMQ;


        ActiveMQ是apache公司下成熟的消息中间件产品,功能齐全被大多数公司引进;社区活跃度高,也成熟,最重要的是支持的协议和java语言较多,持久化方式多种多样(包括内存,文件,数据库);但是ActiveMq不适合上千队列的应用场景。


       RabibitMQ是Erlang语言开发,并发能力强,处理性能好,管理界面丰富,在互联网公司也有大规模引用,但它不支持事务,集群无法做到动态扩展。


       RocketMQ是Alibaba公司提供,模型简单,接口易用,性能非常好,可以大量堆积消息在boker中,支持多种消费,集群消费;但是它内容较新,没有实现JMS接口,对已有系统无法兼容。在支持的协议上有自己定义的一套,部分内容未公开。



      

          


        

       


  


      


推荐阅读
author-avatar
风云变幻1892_602
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有