java消息中间件之零点九:概述

来源:互联网 发布:java web框架 复杂 编辑:程序博客网 时间:2024/04/27 17:29

java消息中间件的解耦服务图示:






所谓消息中间件,单从字面上就不难理解:关注数据的发送和接受,利用高效可靠的异步消息传递机制集成了分布式系统。
异步,意味着发送者并不要求立即收到响应,而且也不会阻塞整个流程。响应可有可无,发送者总会执行剩下的任务。

总的来说,上述是一种基于应用层面的异步消息传递技术。在企业应用中主要涉及三种这方面的应用技术:JMS、AMQP、MQTT

JMS(Java Messaging Service )Java消息传递服务:JMS是最成功的异步消息传递技术之一。随着Java在许多大型企业应用中的使用,JMS就成为了企业系统的首选。它定义了构建消息传递系统的API。
AMQP(Advanced Message Queueing Protocol )高级消息队列协议:JMS可以在任何底层协议上运行,但其API是绑定在java语言上的,那两套使用两种不同编程语言的程序如何通过它们的异步消息传递机制相互通信呢?AMQP解决了这个问题,它使用了一套标准的底层协议,加入了许多其他特征来支持互用性,为现代应用丰富了消息传递需求。
MTQQ(Message Queueing Telemetry Transport )消息队列遥测传输:MQTT协议是为大量计算能力有限,且工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议。
其中三者各有什么特征,需要详细了解的元凶(猿兄)可以参考网上其他博客内容。

下面着重对JMS和AMQP二者在应用上的区别进行总结:


上述三种是技术层面的内容,下面浅述一下三种消息中间件:ActiveMQ、RabbitMQ、KafKa
ActiveMQ:ActiveMQ 出身自Apache,属于能力强劲的开源消息总线。ActiveMQ 是一个JMS Provider实现,完全支持JMS1.1和J2EE 1.4规范,尽管JMS规范出台已久,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。
  • 多种语言和协议编写客户端
  • 语言: 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的特性
  RabbitMQRabbitMQ是基于AMQP打造的可复用企业消息系统。它可以用于大型软件系统各个模块之间的高效通信,支持高并发,支持可扩展。MQ是消费-生产者模型的一个典型的代表,一端往消息队列中不断写入消息,而另一端则可以读取或者订阅队列中的消息。MQ和JMS类似,但不同的是JMS是SUN JAVA消息中间件服务的一个标准和API定义,而MQ则是遵循了AMQP协议的具体实现和产品。
  • 支持多种客户端
  • AMQP的完整实现
  • 事务支持/发布确认
  • 消息持久化
        KafKa:Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。 对于像Hadoop的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消费。
  • 通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。
  • 高吞吐量:即使是非常普通的硬件Kafka也可以支持每秒数百万 的消息。
  • 支持通过Kafka服务器和消费机集群来分区消息。
下面通过一张完成本篇博客内容的收尾(拜拜)
      

原创粉丝点击