`
y806839048
  • 浏览: 1133790 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

消息队列之JMS和AMQP对比

阅读更多

AMQP & JMS对比

初次接触消息队列时,在网上搜索,总是会提到如JMS、AMQP等一些术语。查看了一些文档,对JMS和AMQP的一些理解记录如下。

 

JMS

         通常而言提到JMS(Java MessageService)实际上是指JMS API。JMS是由Sun公司早期提出的消息标准,旨在为java应用提供统一的消息操作,包括create、send、receive

 

等。JMS已经成为Java Enterprise Edition的一部分。从使用角度看,JMS和JDBC担任差不多的角色,用户都是根据相应的接口可以和实现了JMS的服务进行通信,进行相关的操作。

 

         JMS通常包含如下一些角色:                  



 

 

          JMS提供了两种消息模型,peer-2-peer(点对点)以及publish-subscribe(发布订阅)模型。当采用点对点模型时,消息将发送到一个队列,该队列的消息只能被一个消费者消费。而采用发布订阅模型时,消息可以被多个消费者消费。在发布订阅模型中,生产者和消费者完全独立,不需要感知对方的存在。

 

         消息如何从producer端达到consumer端由message-routing来决定。在JMS中,消息路由非常简单,由producer和consumer链接到同一个queue(p2p)或者topic(pub/sub)来实现消息的路由。JMSconsumer同时支持message selector(消息选择器),通过消息选择器,consumer可以只消费那些通过了selector筛选的消息。在JMS兄中,消息路由机制的图示如下:

 



 

 

         常见的消息队列,大部分都实现了JMS API,可以担任JMS provider的角色,如ActiveMQ,Redis以及RabbitMQ等。

 

 AMQP

        AMQP(advanced message queuing protocol)在2003年时被提出,最早用于解决金融领不同平台之间的消息传递交互问题。顾名思义,AMQP是一种协议,更准确的说是一种binary wire-level protocol(链接协议)。这是其和JMS的本质差别,AMQP不从API层进行限定,而是直接定义网络交换的数据格式。这使得实现了AMQP的provider天然性就是跨平台的。意味着我们可以使用Java的AMQP provider,同时使用一个python的producer加一个rubby的consumer。从这一点看,AQMP可以用http来进行类比,不关心实现的语言,只要大家都按照相应的数据格式去发送报文请求,不同语言的client均可以和不同语言的server链接。

 

        在AMQP中,消息路由(messagerouting)和JMS存在一些差别,在AMQP中增加了Exchange和binding的角色。producer将消息发送给Exchange,binding决定Exchange的消息应该发送到那个queue,而consumer直接从queue中消费消息。queue和exchange的bind有consumer来决定。AMQP的routing scheme图示过程如下:

 



 

 

      目前AMQP逐渐成为消息队列的一个标准协议,当前比较流行的rabbitmq、stormmq都使用了AMQP实现。

 

     最后将JMS和AMQP的各项对比如下:

 

 

 

 

参考文档:

 

1、  http://en.wikipedia.org/wiki/AMQP

 

2、  http://en.wikipedia.org/wiki/Java_Message_Service

 

3、  http://www.bytespring.com/blog/understanding-differences-between-amqp-and-jms

 

 

--------------------- 

 

原文:https://blog.csdn.net/hpttlook/article/details/23391967 

 

  • 大小: 17.9 KB
  • 大小: 11.6 KB
  • 大小: 31 KB
  • 大小: 40.4 KB
分享到:
评论

相关推荐

    JMS消息队列机制及案例

    JMS的核心概念包括消息、生产者、消费者、队列和主题。 1. **消息**:JMS中的消息是数据传输的基本单元,包含头信息和体内容。头信息包括目标地址、优先级、时间戳等,体内容则可以是任意类型的数据。 2. **生产者...

    各种消息队列对比

    本对比文档主要针对以下消息队列产品进行分析:ActiveMQ、RabbitMQ、RocketMQ,同时也提及了Joram、HornetQ、OpenMQ,以及一些相关技术标准,如AMQP(Advanced Message Queuing Protocol)、JMS(Java Message ...

    基于消息中间件的学习记录以及源码示例【JMS、AMQP、ActiveMQ、RocketMQ】.zip

    本文将深入探讨基于消息中间件的学习记录,包括Java消息服务(JMS)、先进消息队列协议(AMQP)以及两个流行的开源实现:ActiveMQ和RocketMQ。 首先,Java消息服务(JMS)是一种标准API,用于在Java应用程序之间...

    消息队列.zip

    综上所述,这个资料包涵盖了消息队列的基础理论、ActiveMQ和RabbitMQ这两个常见消息中间件的使用和配置,以及JMS标准的解释。通过深入学习这些内容,开发者可以更好地理解和应用消息队列技术,优化系统性能,提高...

    jms-amqp-demo

    【标题】"jms-amqp-demo" 是一个基于Java技术实现的示例项目,它主要展示了如何使用Java消息服务(JMS)与先进消息队列协议(AMQP)进行交互。JMS是Java平台中用于在分布式环境中交换消息的标准API,而AMQP则是一种...

    基于P2P网络的分布式消息队列.pdf

    除了JMS,AMQP(高级消息队列协议)作为一个开放标准,面向消息、队列、路由、可靠性、安全等方面对消息提供者和客户端的行为进行了强制规定,使得不同厂家的产品真正实现了互操作能力。 分布式消息队列的关键需求...

    MQ 介绍 消息队列 消息中间件

    消息可以分为持久消息和非持久消息,前者在队列管理器重启后仍能保留,后者则不然。 2. **队列(Queue)**:队列是存储和转发消息的数据结构。根据功能,队列可分为本地队列(QLocal)、初始化队列、传输队列、目标...

    active MQ ,消息队列

    ActiveMQ是Apache软件基金会开发的一款开源消息中间件,它遵循开放消息传递协议(Open Message Broker Protocol,即AMQP)和Java消息服务(Java Message Service,JMS)规范。消息队列是分布式系统中的一个重要概念...

    java 提供消息队列的使用

    总的来说,Java消息队列的使用涉及多个层面,包括选择合适的MQ实现、理解JMS接口和消息模型、配置连接和会话、处理异常以及在特定场景下利用阻塞队列优化性能。通过深入学习这些知识点,开发者可以有效地利用消息...

    MQ消息队列实例

    虽然Kafka通常被认为是流处理平台,但其核心功能之一也是消息队列。使用Kafka的Java客户端,我们可以创建ProducerRecord并发送到主题。 ```java Properties props = new Properties(); props.put("bootstrap....

    消息队列介绍和SpringBoot2.x整合RockketMQ、ActiveMQ

    ActiveMQ是Apache项目中的一款开源消息中间件,它支持多种协议,如OpenWire、STOMP、AMQP和MQTT等。ActiveMQ具有以下基础特性: 1. **高可用性**:通过集群和复制策略,ActiveMQ可以提供高可用的消息传递服务,确保...

    消息队列1

    下面我们将深入探讨消息队列的核心概念,包括JMS和AMQP协议,以及与物联网相关的MQTT协议,并简要介绍Kafka和RocketMQ这两种流行的消息队列解决方案。 1. JMS(Java Message Service) JMS是Java平台上的一个标准...

    MQ、JMS以及ActiveMQ关系的理解

    作为JMS的一个实现,ActiveMQ提供了与多种消息队列产品进行交互的能力,并且允许Java应用程序以标准的方式发送和接收消息。ActiveMQ的主要特点包括支持多种编程语言和协议的客户端、完全支持JMS 1.1和J2EE 1.4规范、...

    RabbitMQ实战 高效部署分布式消息队列

    AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。 RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、...

    消息中间件和JMS消息服务.rar

    消息中间件通常支持多种协议和消息格式,如Advanced Message Queuing Protocol (AMQP)、Message Queuing Telemetry Transport (MQTT) 和Simple Object Access Protocol (SOAP)等。通过消息中间件,系统可以异步处理...

    MQ消息队列

    MQ消息队列是一种基于发布/订阅模式或点对点模式的消息传递机制,它允许应用程序之间通过发送和接收消息来通信,而不是直接调用彼此。这种设计使得系统能够处理高并发、低延迟的场景,并提高系统的可靠性和可扩展性...

    qpid-cpp-0.6.tar.gz_AMQP_Open Net_qpid_qpid-cpp_消息队列

    Apache Qpid (Open Source AMQP Messaging) 是一个跨平台的企业通讯解决方案,实现了高级消息队列协议。提供了 Java、C++ 两种服务端版本以及 Java、C++、.NET、Python和Ruby语言的客户端。 其中C++版本的服务器端...

    ActiveMQ消息队列主题订阅Spring整合

    可以使用ActiveMQ的Web控制台监控消息队列的状态,查看消息的发送和接收情况。 通过以上步骤,你可以成功地将ActiveMQ消息队列与Spring框架整合,实现基于主题订阅的消息传递。这种整合有助于解耦系统组件,提高...

Global site tag (gtag.js) - Google Analytics