`
sybilwh
  • 浏览: 12467 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

消息中间件功能对比

    博客分类:
  • MQ
 
阅读更多

几个月之前刚刚调研这部分时写的,有些东西已经和目前的理解不一样了,仅留存。可部分参考。

版本

H 2.0GA

Activemq 5.4.2(5.5 不支持 1.5 ,支持 1.6 )

JORAM 5.5

Popular

Goolge 搜索 openmq ,找到约 110,000 条结果

Goolge 搜索 activemq ,找到约 3,510,000 条结果

Goolge 搜索 Joram ,找到约 1,380,000 条结果

Goolge 搜索 Hornetq ,找到约 429,000 条结果

 

Activemq 官网声称:

Apache ActiveMQ ™ is the most popular and powerful open source messaging and Integration Patterns server

 

Architecture

JORAM: OSGi

OPENMQ: ??

Hornetq: 有自己的内核,和 JMS 无关,有可能是这个内核使得性能很好

ActiveMQ OSGi

Powerful

Specification

都符合:

JMS 1.1 Specification

Java EE 1.4 support (JCA 1.5 Resource Adapter)

Language clients

ActiveMQ much more than OpenMQ, which support only java, c

    ActionScript 3

    Ajax

    C

     C++

    C# and .Net

    Delphi and Delphi/FreePascal

    Erlang

    Flash / ActionScript

    Haskell

    JavaScript - Ajax or WebSockets

    Perl

    PHP

    Pike

    Python

    Ruby and Rails support via ActiveMessaging

    Smalltalk

WebSockets

大部分是通过 stomp 来实现的其他语言互通,比较 cool 的是 WebSockets (基于 stomp ),是 HTML 5 引入的一个东东。其他如 Ajax 是通过 Servlet

还有一部分是通过 OpenWire

Enterprise Integration Patterns

只有 A 提了这么个概念。

使用 Apache Camel 实现和其他企业应用组件的互联。

http://interview.group.iteye.com/group/wiki/1858-apache-camel

对于企业应用来说,由于历史或者多厂商等原因造成了其系统之间的通讯协议多样化,而由于企业业务发展,这些应用系统之间交互需求日益增多。 Apache Camel 可以帮助大家通过定义简单的路由规则来实现不同企业应用之间的互联互通。 Apache Camel 把不同的企业应用抽象成为 Endpoint 通过 URI 来对这些 Endpoint 进行描述,由于 Apache Camel 提供了一个基于 POJO 的企业应用模式 (Enterprise Integration Patterns) 的实现,同时 Camel 提供了 60 多个组件来负责具体的传输协 议,这样用户可以通过简单的消息路由规则定义,就可以实现各应用系统之间交互。

简单来说如果你有一个应用只提供一个 JMS 接口, 而你的另一个应用提供 WebServices 接口,那你的路由规则可以这么定义:
from("jms://xxxx").to("cxf://xxxx)
【注】 Camel 通过 CXF 提供了对 WebService 的支持。
当然你有可能需要对 JMS 接口过来的消息做一些处理在转发给 WebService 应用。
那你只需在两个节点之间要加入一个 processor 来实现你需要做的处理就行了
from("jms://xxxx").processor(new MyProcessor()).to("cxf://xxxx")

由上面的例子可以看到 Camel 的路由规则很直观简单,你可以像写 Java 代码一样定义路由规则。这得益于 Camel 的创建者 James Strachan (他也是 Groovy 的创建者)的贡献。

互操作 Protocols

我理解这部分就是指的互操作。

Stomp

O and A and H 都支持。

http://wikis.sun.com/display/GlassFish/OpenMQStompConnect

AMQP

http://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol activemq JORAM 支持, H 2.0GA 还没有, O 没有。

 

 RESTful API

我理解是指用 HTTP 的方式暴露出 JMS 资源等服务的方式, activemq 支持, H 2.0GA 还没有, O 可以有,但看起来支持的不全面,如下文:

OpenMQ provide different transport protocol and access channels to access OpenMQ functionalities from different prgramming . One of the access channles which involve HTTP is named Universal Message Service (UMS) which provide a simple REST interaction template to place messages and comsume them from any programming language and device which can interact with a network server. UMS has some limitations which is simply understandable based on the RESTful nature of UMS. For current version of OpenMQ, it only supports Message Queues as destinations so there is no publish-subscribe functionality available.

其他 A 支持的互操作协议:

可以看出 A 对这部分的支持远远完善于其他产品。

Flow Control

见: http://www.c2b2.co.uk/iPoint/ipoint?SelectedPage=69&110ArticleID=17

When overloaded with messages, JBoss MQ and JBoss messaging suffered failures that brought the whole application server down. OpenMQ, in contrast, prevented the client from sending any more messages once the message queue reached a size limit. This behaviour protected the application server from failure.

这点之前的性能测试中出现过,超过某个值, mq 不再处理消息了。这点很好,尤其在 embeded 模式的时候。

 

流量控制我觉得和这个是一个东西: H J 都有比较好的流量控制,可以指定客户端发送条数或发送速率, A 也不差。这部分我觉得也比较重要,可以测试一下。

 

有趣的是, H J 的功能写的很像,有的句子几乎一样:)

http://community.jboss.org/wiki/HornetQFeatures

http://joram.ow2.org/features.html

Producer flow control.
JORAM provides a flow control mechanism to prevent clients overwhelming a server with messages. On a per connection basic you can specify the maximum rate, that a producer is allowed to send messages at.

Large Message

H 对这点很自信,可以支持 8G 消息,内存只有 50m

Huge message support

Send and receive multi-gigabyte messages fully reliably and transactionally even though your server might be running in only 50MiB of RAM!

We have tested up to 8GiB but theoretically you should be able to send / consume messages up to 2^63-1 bytes in size, assuming you have sufficient disk space, which is quite unlikely .

 

message persistence

消息持久化的支持上, H 也很自信

HornetQ provides message persistence using its own built-in, high performance journal.

HornetQ has no dependency on clunky, slow, relational databases for persistence.
关系型数据库太慢之类的, A 好像还得用数据库。
The journal is a unique piece of technology that automatically detects if running on Linux and uses Linux Asynchronous IO (AIO) via a native code layer for astonishing performance.

If AIO is not available seamlessly falls back to using Java NIO, so will run seamlessly on any Java platform.

Watch our competitors weep when they see it fly

 

 

J 也挺自信,而且可以换持久化实现

JORAM provides message persistence using its own built-in high performance journal.
The JORAM persistence system is completely pluggable, it defines a Service Provider Interface (SPI) that you can implement in order to plug-in a new implementation.
JORAM is shipped with additionnal persistence modules using relational databases for example.

Monitoring

三个都有,我认为 openmq 这部分做得够用了,甚至是很好了。

advisory messages A 提供的,比 JMX 更高级一些的诊断和监控,见《 ActiveMQ in Action 》一书,第 14.1.2 节:

for more complex events such as sending messages to a

destination without a consumer, advisory messages must be explicitly enabled. 如检测没有消费者订阅的 topic ,这部分需要自己定义监听器。

留待验证。

Performance

H 使用第三方机构提供的测试,测试用例为复杂用例是一个超市公司的用例。见 http://www.spec.org/jms2007/results/res2010q1/jms2007-20100119-00015.html

看样子 H 是最高的,需要测试。

HA

除了 O 没有(土),其他都有,一般都是共享磁盘和数据备份(只备份持久化的消息)。需要测试这个的功能。

其他记录

http://wikis.sun.com/display/GlassFish/OpenMQGlassfishQuestions 如何打印 ra 的日志

http://www.infoq.com/cn/articles/AMQP-RabbitMQ AMQP RabbitMQ 入门

http://community.jboss.org/wiki/HornetQOnJetty 集成 HornetQ Jetty

更多关于集成 HornetQ

http://hornetq.sourceforge.net/docs/hornetq-2.0.0.BETA5/user-manual/en/html/appserver-integration.html

http://hornetq.sourceforge.net/docs/hornetq-2.0.0.BETA5/user-manual/en/html/embedding-hornetq.html

http://www.iteye.com/news/10147-maven-hornetq-jboss

http://fendou.org/2010/05/20/amqp-instruction/ AMQP 协议介绍

 

http://java.dzone.com/news/jms-over-http-using-openmq-sun RESTful 字眼

http://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol AMQP

 

分享到:
评论

相关推荐

    消息中间件,消息中间件,消息中间件

    五、常见消息中间件对比 1. RabbitMQ:基于AMQP协议,支持多种语言,适合小型项目和开发测试。 2. Apache Kafka:专为大规模数据流设计,适合实时数据处理和日志收集。 3. RocketMQ:阿里巴巴开源,适用于大规模...

    三个经典消息中间件比较

    本文将对比三种经典的消息中间件:MQ(IBM出品)、JMS(Java消息服务)和TIBCO Rendezvous(TIBCO RV),探讨它们在功能、架构、消息传输方式等方面的差异。 首先,**消息中间件的基本功能**包括: 1. **异步通信**...

    消息中间件学习案例与总结

    3. **技术选型**:对比分析各种消息中间件的优缺点,如RabbitMQ的AMQP协议、Kafka的高吞吐量特性、ActiveMQ的易用性等,帮助读者选择适合的中间件。 4. **实战教程**:提供从安装、配置到实际编程的步骤,可能包括...

    TIBCO_RV__VS__IBM_MQ和JMS消息中间件的对比分析

    ### TIBCO Rendezvous (TIBCO RV) 与 IBM MQ 及 JMS 消息中间件的对比分析 #### TIBCO Rendezvous 技术简介 TIBCO Rendezvous(简称TIBCO RV)是一款强大的中间件产品,它通过一系列专有的技术,实现了异构系统...

    Java消息服务的消息中间件的研究与设计

    ### Java消息服务的消息中间件的研究与设计 #### 一、引言 随着分布式计算环境的日益普及和技术的进步,异构系统间的通信问题逐渐成为关注焦点。消息中间件作为一种解决这一问题的有效手段,其重要性日益凸显。...

    消息中间件在分布式系统中的作用介绍

    #### 消息中间件的定义与功能 消息中间件(Message-oriented Middleware, MOM)是一种基础软件设施,专注于在分布式系统之间发送和接收消息。它通过提供高效可靠的消息传递机制来促进不同平台间的无缝数据交换,并...

    三个经典消息中间件的比较.docx

    本文将对比分析三个经典的消息中间件:MQ(IBM出品)、JMS(JAVA消息服务)和TIBCO Rendezvous(RV)。 首先,这三种中间件都提供了基本的消息处理功能,如异步消息传递、发布订阅模型、消息持久化以及网络传输优化...

    三个经典消息中间件的比较.pdf

    本文将对比分析三个经典的消息中间件:MQ(IBM出品)、JMS(Java Message Service)以及TIBCO Rendezvous(简称RV)。 1. **消息中间件基本功能** - **异步通信**:所有这三种中间件都能实现消息的异步发送和接收...

    分布式消息中间件选型比对验证报告

    首先,根据提供的描述,分布式消息中间件的评测模型是一个全面的评估框架,涵盖了12个主要类别,包括开源许可证、行业认可度、产品活力、服务支持、安全性、兼容性、可维护性、可扩展性、功能性、可靠性、易用性及...

    消息中间件activemq项目demo

    1. **ActiveMQ**:ActiveMQ是Apache软件基金会的一个开源项目,是一款高效、灵活且功能丰富的消息中间件,它支持多种协议,如OpenWire、STOMP、AMQP、MQTT等,用于在分布式系统中进行可靠的消息传递。 2. **Java ...

    2024年java面试题-消息中间件RabbiMQ面试题

    ### 2024年Java面试题:消息中间件RabbitMQ面试题解析 #### 一、消息队列(MQ)的基本概念与...理解其核心概念、优缺点以及与其他消息中间件的对比,不仅有助于面试准备,也能为实际工作中选择合适的技术栈提供参考。

    消息中间件kafka与activemq、rabbitmq、zeromq、rocketmq的比较

    ### 消息中间件对比分析 #### Kafka与Activemq、Rabbitmq、ZeroMq、Rocketmq的比较 在现代分布式系统中,消息中间件(Message Queue, MQ)扮演着至关重要的角色,它们用于在分布式组件之间传输消息,帮助解决网络...

    safmq.src.0.5.gz_MQ-2_saf_中间件 服务器_中间件服务器_消息队列

    为了解决这种问题,可以采用消息中间件产品(例如Windows的MSMQ还有IBM的MQ),但是这种产品比较庞大而且花费不少,对于小规模应用而言没有必要。 SAFMQ(全称为Store and Forward Message Queue)是一个简单的消息...

    浅析分布式系统中消息中间件的设计及实现途径.pdf

    ATC系统通常包含多个子网,通信环境比较复杂,因此设计消息中间件时要根据数据的属性采用不同的信息传送策略。ATC系统主要包括两个主要组件:CDC(Change Data Capture,变更数据捕获)和MQM(Message Queue Manager...

    MySQL流行中间件比较及实现原理

    ### MySQL流行中间件比较及实现原理 #### 一、传统数据库架构演变过程 随着互联网技术的发展,业务量急剧增长,传统的数据库架构面临诸多挑战。早期的数据库架构简单,通常采用单体架构,即一个应用程序直接连接到...

    本项目基于Spring这一平台,整合流行的开源消息队列中间件ActiveMQ,实现一个向ActiveMQ添加和读取消息的功能

    本项目正是利用Spring平台来集成开源消息队列中间件ActiveMQ,以实现消息的发送和接收功能,同时也对消息队列的两种主要工作模式——生产者-消费者模式和发布-订阅模式进行了深入探讨。 首先,ActiveMQ是Apache软件...

    08.3、消息中间件--RocketMq(14题)1

    6. **与其他消息中间件的对比**: RabbitMQ 作为中小型公司的首选,因其管理界面简洁和高并发性能而受到欢迎,但其吞吐量相对较低。RabbitMQ 是基于Erlang开发的,提供良好的并发能力和低延迟,但其MQ功能相对较...

    Cetus中间件的架构与性能优化.pptx

    Cetus中间件是一款专为MySQL数据库设计的高性能、高可用的中间层服务,旨在提供数据访问优化、负载均衡以及故障切换等功能,以提高系统的整体性能和稳定性。本演讲主要围绕Cetus中间件的架构设计、技术要点以及性能...

    基于Spring的AMQP模块,整合流行的开源消息队列中间件rabbitMQ,实现一个向rabbitMQ添加和读取消息的功能

    本项目基于Spring的AMQP模块,整合流行的开源消息队列中间件rabbitMQ,实现一个向rabbitMQ添加和读取消息的功能。并比较了两种模式:生产者-消费者模式和发布-订阅模式的区别。AMQP作为比JMS更加高级的消息协议,支持...

Global site tag (gtag.js) - Google Analytics