流行消息队列服务

一、简单消息队列服务 HTTPSQS

HTTPSQS(HTTP Simple Queue Service)是一款基于 HTTP GET/POST 协议的轻量级开源简单消息队列服务,使用 Tokyo Cabinet 的 B+Tree Key/Value 数据库来做数据的持久化存储。

队列(Queue)又称先进先出表(First In First Out),即先进入队列的元素,先从队列中取出。加入元素的一头叫“队头”,取出元素的一头叫“队尾”。利用消息队列可以很好地异步处理数据传送和存储, 当你频繁地向数据库中插入数据、频繁地向搜索引擎提交数据,就可采取消息队列来异步插入。另外,还可以将较慢的处理逻辑、有并发数量限制的处理逻辑,通过 消息队列放在后台处理,例如FLV视频转换、发送手机短信、发送电子邮件等。

1、HTTPSQS 具有以下特征:

● 非常简单,基于 HTTP GET/POST 协议。PHP、Java、Perl、Shell、Python、Ruby等支持HTTP协议的编程语言均可调用。
● 非常快速,入队列、出队列速度超过10000次/秒。
● 高并发,支持上万的并发连接,C10K不成问题。
● 支持多队列。
● 单个队列支持的最大队列数量高达10亿条。
● 低内存消耗,海量数据存储,存储几十GB的数据只需不到100MB的物理内存缓冲区。
● 可以在不停止服务的情况下便捷地修改单个队列的最大队列数量。
● 可以实时查看队列状态(入队列位置、出队列位置、未读队列数量、最大队列数量)。
● 可以查看指定队列ID(队列点)的内容,包括未出、已出的队列内容。
● 查看队列内容时,支持多字符集编码。
● 源代码不超过700行,适合二次开发。

以上来自百度百科。

二、ActiveMQ

ActiveMQ:是Apache出品,最流行的,能力强劲的开源消息总线。是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现。

JMS(Java消息服务):是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。

2. JMS消息模式

1) 点对点或队列模式

每个消息只能有一个消费者。消息的生产者和消费者之间没有时间上的相关性,无论消费者在生产者发送消息的时候是否处于运行状态,它都可以提取消息。

2) Pub/Sub 发布/订阅模式

每个消息可以有多个消费者。生产者和消费者之间有时间上的相关性。订阅一个主题的消费者只能消费自它订阅之后发布的消息。

3. Broker节点

代表一个运行MQ的节点。

4. Transport传输方式

ActiveMQ目前支持的Transport有:VM Transport、TCP Transport、NIO Transport、SSL Transport、Peer Transport、UDP Transport、Multicast Transport、HTTP and HTTPS Transport、WebSockets
Transport、Failover Transport、Fanout Transport、Discovery Transport、ZeroConf Transport等。

1) VM Transport:允许客户端和Broker直接在VM内部通信,采用的连接不是Socket连接,而是直接的方法调用,从而避免了网络传输的开销。应用场景也仅限于Broker和客户端在同一JVM环境下。

2) TCP Transport:客户端通过TCP Socket连接到远程Broker。配置语法:

tcp://hostname:port?transportOptions

3) HTTP and HTTPS Transport:允许客户端使用REST或者Ajax的方式进行连接。这意味着可以直接使用Javascript向ActiveMQ发送消息。

4) WebSockets Transport:允许客户端通过HTML5标准的WebSockets方式连接到Broker。

5) Failover Transport:青龙系统MQ采用的就是这种连接方式。这种方式具备自动重新连接的机制,工作在其他Transport的上层,用于建立可靠的传输。允许配置任意多个的URI,该机制将会自动选择其中的一个URI来尝试连接。配置语法:

failover:(tcp://localhost:61616,tcp://localhost:61617,.....)?transportOptions

6) Fanout Transport:主要适用于生产消息发向多个代理。如果多个代理出现环路,可能造成消费者接收重复的消息。所以,使用该协议时,最好将消息发送给多个不相连接的代理。

5. Persistence持久化存储

1) AMQ Message Store

ActiveMQ 5.0 的缺省持久化存储方式。

2) Kaha Persistence

这是一个专门针对消息持久化的解决方案。它对典型的消息使用模式进行了优化。

3) JDBC Persistence

目前支持的数据库有:Apache Derby, Axion, DB2, HSQL, Informix, MaxDB, MySQL, Oracle, Postgresql, SQLServer, Sybase。

4) Disable Persistence

不应用持久化存储。

6. 集群方案

1. Master / Slave

1.1. Pure Master Slave

无单点故障;

不需要依赖共享文件系统或是共享数据库,使用 KahaDB的方式持久化存储;

一个Master只能带一个Slave;

Master工作期间,会将消息状况自动同步到Slave;

Master一旦崩溃,Slave自动接替其工作,已发送并尚未消费的消息继续有效;

Slave接手后,必须停止Slave才能重启先前的Master;

1.2. Shared File System Master Slave

1.3. JDBC Master Slave

配置上,不存在Master和Slave的区分,多个共享数据源的Broker构成JDBC Master Slave;

首先抢到资源(数据库锁)的Broker成为Master,其他Broker定期尝试抢占资源;

一旦Master崩溃,其他Broker抢占资源,最终只有一台抢到,立刻成为Master,之前的Master即便重启成功,也只能作为Slave等待;

7. 延伸链接

1. ActiveMQ http://activemq.apache.org/

2. Metamorphosis (MetaQ) http://metaq.taobao.org/

淘宝开源分布式消息中间件,在淘宝和支付宝有着广泛应用。

3. DotNetMQ

基于C#和.NET框架的开源消息队列系统。

4. JBoss Messaging http://www.jboss.org/jbossmessaging/

时间: 2024-08-02 00:14:48

流行消息队列服务的相关文章

消息队列服务(MQS)技术浅析

1    MQS简介          消息队列服务(Message Queue Service,简称MQS),是阿里云推出的分布式消息中间件服务.          MQS旨在提供可靠.海量.高并发的分布式消息队列服务,从而帮助应用开发者实现应用之间以及应用内部各组件之间的消息传递,解耦系统之间的依赖. 2    MQS功能特点          消息队列最早出现在操作系统中,解决了传统的进程通信模式中存在的很多弊端.消息队列具备的优点包括: (1)     单独对消息的收.发进行管理,确保消

云服务厂商都在推荐轻量级的存储队列服务,用来取代原有的比较重的消息队列服务

这个小玩意源于上周在研究Azure的时候,发现云服务厂商都在推荐轻量级的存储队列服务,用来取代原有的比较重的消息队列服务,具体来说,比如阿里云就推荐使用消息服务替代消息队列,在Azure中,就有一个轻量级的存储队列(Storage Queue)可以替代服务总线(Service Bus), 简单试用了一下Azure的Storage Queue后,发现这玩意很好用,于是决定全面的深入研究一下,再将公司电商系统内的相关任务处理均重构成使用存储队列服务,而深入研究得找个案例呀,于是就想到了做个分布式爬虫

阿里云云消息队列服务稳定吗

问题描述 在阿里云论坛上看到一个帖子,http://bbs.aliyun.com/read.php?tid=145878,发现阿里云推出来云消息服务队列,加入群拿到文档,简单试用了一下,貌似跟aws的消息队列服务很像,不知道稳定性怎么样,有谁试用过吗? 解决方案 本帖最后由 zjliwenzhao 于 2013-09-11 13:29:25 编辑解决方案二:没有人用过吗?解决方案三:没有人用过吗?

C#中使用消息队列服务

C#中使用Windows消息队列服务 http://www.cnblogs.com/xinhaijulan/archive/2010/08/22/1805768.html http://h2appy.blog.51cto.com/609721/184323 http://www.cnblogs.com/isdavid/archive/2012/08/16/2642867.html http://www.cnblogs.com/beniao/archive/2008/06/26/1229934.h

[置顶]【结果很简单,过程很艰辛】记阿里云Ons消息队列服务填坑过程

    Maybe 这个问题很简单,因为解决方法是非常简单,但填坑过程会把人逼疯,在阿里云ONS工作人员.同事和朋友的协助下,经过一天的调试和瞎捣鼓,终于解决了这个坑,把问题记下来,也许更多人在碰到类似问题的时候,会开放思路.当然不得不说,Ons的.NET接口还很不完善,甚至没有独立在Windos 2008/2012服务器测试过,希望官方加把力. 1.阿里云ONS介绍    ONS(Open Notification Service)即开放消息服务,是基于阿里开源消息中间件MetaQ(Rocke

WCF分布式开发步步为赢(13):WCF服务离线操作与消息队列MSMQ

之前曾经写过一个关于MSMQ消息队列的文章:WCF分布式开发必备知识 (1):MSMQ消息队列 ,当时的目的也是用它来作为学习WCF 消息队列MSMQ编程的 基础文章.在那篇文章里,我们详细介绍了MSMQ消息队列的基本概念.安装.部 署.开发.调试等相关问题.今天我们来学习WCF分布式开发步步为赢(13):WCF 服务离线操作与消息队列MSMQ.在WCF框架下使用MSMQ消息队列服务编程. 这 里我会给出一个使用WCF MSMQ实现离线请求的DEMO示例程序. 全文结构是:[1]MSMQ基本概念

消息队列中点对点与发布订阅区别(good)

背景知识 JMS一个在 Java标准化组织(JCP)内开发的标准(代号JSR 914).2001年6月25日,Java消息服务发布JMS 1.0.2b,2002年3月18日Java消息服务发布 1.1. Java消息服务(Java Message Service,JMS)应用程序接口是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信. 点对点与发布订阅最初是由JMS定义的.这两种模式主要区别或解决的问题就是发送到队列的消息能否重

消息队列在VB.NET数据库开发中的应用

数据|数据库 我们先简单的了解一下什么是消息队列(MSMQ)?消息队列是 Windows 2000(NT也有MSMQ,WIN95/98/me/xp不含消息队列服务但是支持客户端的运行)操作系统中通讯的基础,也是用于创建分布式.松散连接通讯应用程序的工具.这些应用程序可以通过不同种类的网络进行通讯,也可以与脱机的计算机通讯.消息队列分为用户创建队列和系统队列,用户队列分为: · "公共队列"在整个可传递消息的"消息队列"网络中复制并传输,并且有可能由网络连接的所有站点

分布式系统解决之道:目录、消息队列、事务系统及其他

目录服务(ZooKeeper)   分布式系统是一个由很多进程组成的整体,这个整体中每个成员部分,都会具备一些状态,比如自己的负责模块,自己的负载情况,对某些数据的掌握等等.而这些和其他进程相关的数据,在故障恢复.扩容缩容的时候变得非常重要.   简单的分布式系统,可以通过静态的配置文件,来记录这些数据:进程之间的连接对应关系,它们的IP地址和端口等等.然而,一个自动化程度高的分布式系统,必然要求这些状态数据都是动态保存的.这样才能让程序自己去做容灾和负载均衡的工作.   一些程序员会专门自己编