Javascript node.js的作业队列 出身背景

Javascript node.js的作业队列 出身背景,javascript,node.js,redis,rabbitmq,task-queue,Javascript,Node.js,Redis,Rabbitmq,Task Queue,在一个开源项目中,我们有很多后端处理任务,有些繁重,有些轻量级,而且速度非常快 我们已经决定使用作业队列来处理不同的作业,因为通过队列,我们可以扩大消费者规模,从而一次执行更多作业,并保证即使工人崩溃,作业也能实际执行 要求 可靠性很重要。我们希望能够确保每个作业都已完成,即使工作人员执行的作业崩溃、队列崩溃或系统崩溃 我们还希望能够在过载队列上扩展工作模块 我已经看到它有可靠的模式(对于作业和频道,所以如果任何东西崩溃,作业不会丢失),并且支持完全按照我想要的进行缩放,但它不使用Redis(我

在一个开源项目中,我们有很多后端处理任务,有些繁重,有些轻量级,而且速度非常快

我们已经决定使用作业队列来处理不同的作业,因为通过队列,我们可以扩大消费者规模,从而一次执行更多作业,并保证即使工人崩溃,作业也能实际执行

要求 可靠性很重要。我们希望能够确保每个作业都已完成,即使工作人员执行的作业崩溃、队列崩溃或系统崩溃

我们还希望能够在过载队列上扩展工作模块

我已经看到它有可靠的模式(对于作业和频道,所以如果任何东西崩溃,作业不会丢失),并且支持完全按照我想要的进行缩放,但它不使用Redis(我不知道它是赞成还是反对)

我也研究过Kue,但它的API相当繁琐,我无法立即判断它是否适合我

我还听说过Disque(来自Redis的作者)、Bull、Kafka等,并对可用的技术数量感到困惑


是否有人熟悉不同的队列技术,并能根据要求判断最适合项目的是什么?

不是卡夫卡-它的目的不是一般的工作队列。它是一个分布式偶数日志和事件队列,用于其他目的(事件源等)

否则,选择一个并使用它运行。Kue或Disque或RabbitMQ或ZeroMQ或Gearman或其他任何东西。他们都会为你工作。他们都有权衡,但你上面所描述的并没有告诉我任何选择都是不可能的

就我个人而言,我更喜欢兔子。我喜欢集中式代理模型,并且在消息队列系统中工作了多年,我喜欢RabbitMQ将许多优秀分布式系统的模式和实践烘焙到其中的方式。我喜欢手动确认消息已被处理,将其从队列中删除,或使进程崩溃,然后将消息返回到队列。在我看来,RabbitMQ有很多值得喜欢的地方

但其他选择都很好。挑一个就走


(FWIW,我有一个节点开发者RabbitMQ培训包,可在上获得)

不是Kafka-它的用途不是一般的作业/工作队列。它是一个分布式偶数日志和事件队列,用于其他目的(事件源等)

否则,选择一个并使用它运行。Kue或Disque或RabbitMQ或ZeroMQ或Gearman或其他任何东西。他们都会为你工作。他们都有权衡,但你上面所描述的并没有告诉我任何选择都是不可能的

就我个人而言,我更喜欢兔子。我喜欢集中式代理模型,并且在消息队列系统中工作了多年,我喜欢RabbitMQ将许多优秀分布式系统的模式和实践烘焙到其中的方式。我喜欢手动确认消息已被处理,将其从队列中删除,或使进程崩溃,然后将消息返回到队列。在我看来,RabbitMQ有很多值得喜欢的地方

但其他选择都很好。挑一个就走


(FWIW,我有一个RabbitMQ节点开发人员培训包,可在上获得)

谢谢,Rabbit的唯一缺点是它已经实现了Centeralized,我想让它有机会使用构建在Redis之上的去中心化技术,比如Kue。等待更多关于Kue的信息-当你说它支持我需要的东西时,你能再详细一点吗?Redis的分散方式与RabbitMQ相同:它是一个分布式系统。Redis+Kue的作用也与RabbitMQ相同,作为代理消息队列。您必须连接到代理(RabbitMQ服务器)才能发送和接收消息。Redis和Kue的工作方式相同。您连接到redis服务器以发送和接收消息我在simpleprogrammer上做了一篇采访/博客文章,讨论了redis和rmq之间的主要区别:谢谢,但它没有直接回答评论中的问题。Kue似乎通过相同的队列传输所有作业(使用createQueue方法),我可以指定要传递的不同作业-对吗?因为这是我想避免的事情。。我想把工作分成不同的队列。在rabbit中,我只创建了多个通道。我看到Kue还具有“完成”回调功能,在作业完成时确认作业。这已经是一个很好的观点了。谢谢,Rabbit唯一的缺点是它已经实现了中心化,我想给它一个机会,让它可以使用建立在Redis之上的分散技术,比如Kue。等待更多关于Kue的信息-当你说它支持我需要的东西时,你能再详细一点吗?Redis的分散方式与RabbitMQ相同:它是一个分布式系统。Redis+Kue的作用也与RabbitMQ相同,作为代理消息队列。您必须连接到代理(RabbitMQ服务器)才能发送和接收消息。Redis和Kue的工作方式相同。您连接到redis服务器以发送和接收消息我在simpleprogrammer上做了一篇采访/博客文章,讨论了redis和rmq之间的主要区别:谢谢,但它没有直接回答评论中的问题。Kue似乎通过相同的队列传输所有作业(使用createQueue方法),我可以指定要传递的不同作业-对吗?因为这是我想避免的事情。。我想把工作分成不同的队列。在rabbit中,我只创建了多个通道。我看到Kue还具有“完成”回调功能,在作业完成时确认作业。这已经是一个很好的观点了。