工人是否可以将消息发回给制作人

我有一个NodeJS应用程序,出现以下情况:我收到来自用户的请求来计算需要使用非常复杂的math公式的内容。 目前,我运行这个整个过程,找出价值,然后发回给用户。 不幸的是,这不是非常asynchronous友好:)

我想要做的是在后台运行这个整个操作,一旦任务完成,工人回到我的计算值,然后发回给用户。

我一直在寻找各种各样的工作队列,包括Kue , Celery , Resque和Beanstalk ,但是他们都没有提供这个function。 他们在发送电子邮件或运行任何不需要接收某种价值的工作方面工作的很好,只是简单的成功与否,但似乎没有任何东西允许工作者实际上将自定义消息发送回创build该任务的原始生产者。

我说错了,上面提到的所有队列都不支持吗? 如果是这样的话,请指出我可以在哪些文档中了解如何利用此function。 否则,你可以指向我的其他任何支持此function的人吗?

您应该从专用队列中获取结果,然后将其推送给用户。
使用芹菜作为任务队列pipe理器和长轮询或套接字操作的返回结果给用户。
从nodeJS应用程序,您可以使用节点芹菜https://github.com/mher/node-celery或直接插入消息芹菜保留队列。
例如

var amqp = require('amqp'); var connection = amqp.createConnection({ host: 'localhost', port: 5672 }); connection.on('ready',function(){ connection.publish('celery', {id:uuid.v4(), task:'yourapp.tasks.usefultask', args:['firstArg','secondArg'], kwargs:{}},{ 'contentType': 'application/json' }); }); 

您可以在https://github.com/mher/node-celery上使用芹菜

node-celery允许排队任务并接收执行结果

 var celery = require('node-celery'), client = celery.createClient({ CELERY_BROKER_URL: 'amqp://guest:guest@localhost:5672//', CELERY_RESULT_BACKEND: 'amqp' }); client.on('connect', function() { client.call('factorial', [1000000], function(result) { console.log(result); }); });