MemcacheQ
持久化消息队列(简称mcq)是一个轻量级的消息队列,特性如下:
简单易用
处理速度快
多条队列
并发性能好
与memcache的协议兼容。意味着只要装了前者的extension即可,不需要额外的插件
在zend framework中使用很方便
MSMQ
这是微软的产品力唯一被认为有价值的东西。如果MSMQ能证明可以应对这种任务,他们将选择使用它。
关键是它并不复杂,除了接收和发送,没有别的;它有一些硬性限制,比如最大消息体积是4MB。
然而,通过和一些想MassTransit或NServiceBus这样的软件的连接,它完全可以解决这些问题。
ZeroMQ
ZeroMQ是一个非常轻量级的消息系统,号称最快的消息队列系统,专门为高吞吐量/低延迟的场景开发,在金融界的应用中经常可以发现它。
与RabbitMQ相比,ZeroMQ支持许多高级消息场景,能够实现RabbitMQ不擅长的高级/复杂的队列,但是你必须实现ZeroMQ框架中的各个块(比如Socket或Device等)。
ZeroMQ具有一个独特的非中间件的模式,你不需要安装和运行一个消息服务器或中间件,因为你的应用程序将扮演这个服务角色。你只需要简单地引用ZeroMQ程序库,可以使用NuGet安装,然后你就可以愉快地在应用程序之间发送消息了。
但是ZeroMQ仅提供非持久性的队列,即没有地方可以观察它是否有问题出现,也就是说如果down机,数据将会丢失。
ZeroMQ非常灵活,但是你必须学习它的80页的手册(如果你要写一个分布式系统,一定要阅读它)。
Jafka/Kafka
Kafka(能将消息分散到不同的节点上)是LinkedIn于2010年12月开发并开源的一个分布式MQ系统,现在是Apache的一个孵化项目,是一个高性能跨语言分布式Publish/Subscribe消息队列系统,而Jafka是在Kafka之上孵化而来的,即Kafka的一个升级版。具有以下特性:
快速持久化,可以在O(1)的系统开销下进行消息持久化;
高吞吐,在一台普通的服务器上既可以打到10W/s的吞吐速率;
完全的分布式系统,Broker、Producer、Consumer都原生自动支持分布式,自动实现复杂均衡;
支持Hadoop数据并行加载,统一了在线和离线的消息处理,对于像Hadoop一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。
相对于ActiveMQ是一个非常轻量级的消息系统,除了性能非常好之外,还是一个工作良好的分布式系统。
Apache ActiveMQ
ActiveMQ居于(RabbitMQ&ZeroMQ)之间,类似于ZemoMQ,它可以部署于代理模式和P2P模式。
ActiveMQ被誉为Java世界的中坚力量。它有很长的历史,且被广泛使用。它还是跨平台的,给那些非微软平台的产品提供了一个天然的集成接入点。
然而它只有跑过了MSMQ才有可能被考虑。如需配置ActiveMQ则需要在目标机器上安装Java环境。
类似于RabbitMQ,它易于实现高级场景,而且只需付出低消耗。它被誉为消息中间件的“瑞士军刀”。
RabbitMQ
RabbitMQ是使用Erlang编写的一个开源消息队列,本身支持很多的协议:AMQP, XMPP, SMTP, STONP,也正是如此,使的它变的非常重量级,更适合于企业级的开发。
它实现了代理(Broker)架构,意味着消息在发送到客户端之前可以在中央节点上排队。此特性使得RabbitMQ易于使用和部署,适宜于很多场景如路由、负载均衡或消息持久化等,用消息队列只需几行代码即可搞定。
但是,这使得它的可扩展性差,速度较慢,因为中央节点增加了延迟,消息封装后也比较大。
如需配置RabbitMQ则需要在目标机器上安装Erlang环境。