回复内容:gearman是分布式任务分发系统,重点是job
rabbitmq是分布式消息队列,重在message/data
gearman要实现message的priority、order、filter、persistence..都比较麻烦(或者说不够直接),而这些都是典型的mq系统要考虑的。正如楼上回复的一样,gearman 偏重任务分发(也有调度),基本工作模式,是由 client (多个)向 server 去注册一些函数,当然 server 接受到任务后,分发到这些函数上。
rabbitmq 则是很多消息模型的实现,比如简单的生产者消费者、发布订阅、广播,甚至可以模拟 rpc 等等,gearman 的功能,简单的生产者消费者模型就可以实现,只是思路上稍微换一下,需要消费消息来实现,官方也有类似参考例子:rabbitmq - rabbitmq tutorial - work queues
建议看下 rabbitmq 官方这个例子教程 rabbitmq - getting started with rabbitmq ,里面包含了几种模型的实例,很容易结合我们现实中场景。
至于优缺点,仁者见仁。
大概三年前吧,我给一家某行业内比较知名公司优化过 gearman 到 rabbitmq 的方案,高峰时候一小时消息量在 x 千万以上,优化前 gearman server 负载较重,包括 client(worker)也会经常挂掉,很多消息会丢失,后来迁移到 rabbitmq 上面,server 只有一台(备份一台基本从来就没用过),client 采用 ack 确认消息成功消费掉,后来就没有然后了。。。这里故事不在描述。
推荐使用 rabbitmq,不仅仅是作为消息模型,还可以改善系统架构设计。
