您的位置:首页 > 数据库 > Redis

【中间件】消息队列(一):RabbitMQ、ActiveMQ、Kafka和Redis

2016-07-31 18:42 861 查看
消息队列(Message Queue)是一种进程间通信或同一进程的不同线程间的通信方式。在分布式系统中,消息队列中间件是组件间沟通的中间(也是中坚)桥梁。下面主要比较目前比较流行的4个消息队列中间件产品,我们可以根据自身产品的语言、场景、要求等选择合适的MQ产品。

RabbitMQ是一个Advanced Message Queuing Protocol(AMQP)的开源实现,由以高性能、可伸缩性出名的Erlang写成。RabbitMQ Server适用的OS有:Windows、Linux/Unix和Mac OS X,RabbitMQ官方的Client有Java、.Net/C#和Erlang。

AMQP协议主要有3个组件:
交换器(Exchange):它是发送消息的实体
队列(Queue):它是接收消息的实体
绑定器(Bind):将交换器和队列连接起来,并且封装消息的路由信息



图1 AMQP协议原理图

ActiveMQ是一个完全支持JMS 1.1和J2EE 1.4规范的JMS Provider实现。JMS(Java Messaging Service)是Java平台上有关面向消息中间件的技术规范,它便于消息系统中的Java应用程序进行消息交换,并且通过提供标准的产生、发送、接收消息的接口简化企业应用的开发。

JMS消息通常有两种类型:
点对点(Point-to-Point):在点对点的消息系统中,消息分发给一个单独的使用者,点对点消息往往与队列相关联。
发布/订阅(Publish/Subscribe):发布/订阅消息系统支持一个事件驱动模型,消息生产者和消费者都参与消息的传递。该类消息一般与特定的主题关联。

Kafka是一种分布式的,基于发布/订阅的消息系统。Kafka开发语言为Scala,支持跨平台。其设计主要目标如下:
以时间复杂度为O(1)的方式提供消息持久化能力
高吞吐率
支持Kafka Server间的消息分区,及分布式消费,同时保证消息顺序传输
支持离线数据处理和实时数据处理
支持在线水平扩展



图2 Kafka结构图

Redis是一个高性能的key-value数据库,它的出现很大程度补偿了memcached这类key-value存储的不足。虽然它是一个数据库系统,但本身支持MQ功能,完全可以当做一个轻量级的队列服务器使用。Redis开发语言为C,支持OS为Linux。

Redis从2.0版本开始支持发布/订阅指令,发布者调用redis的publish方法往特定的channel发送消息,订阅者在初始化的时候要订阅到该channel,一旦有消息就会立即接收。

参考文献:
AMQP和RabbitMQ入门.    Joern Barthel.    杨晨 译
ActiveMQ –JMS开源框架入门介绍.    gloomyfish
Kafka设计解析.    郭俊

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: