草庐IT

node.js - 是否有令人信服的理由使用基于 AMQP 的服务器而不是 beanstalkd 或 redis?

coder 2023-05-29 原文

我正在为一个项目写一篇文章,该项目负责处理面向数据服务器的主要应用程序之外的任务,该数据服务器是使用 Node.js 用 javascript 编写的。它需要处理 future 安排的任务,并可能处理“现在”的任务。 “现在”只是意味着下次有工作人员可用时,它将执行该任务,因此该位可能无关紧要。工作人员都将与外部资源交谈,一个示例工作是发送电子邮件。我们是一家小商店,我们没有大量资源,所以我不想做的一件事就是在这个过程中开始混合语言,我已经看到 Node 可以很容易地为我们做到这一点,所以这就是我们将要采用的方法,除非我在开​​始编码之前看到令人信服的理由不这样做。

说了这么多,我不知道是否有令人信服的理由使用基于 AMQP 的服务器,例如 OpenAMQRabbitMQKue 这样的东西或 Beanstalkd与 Node 客户端。所以,我们开始吧:

是否有令人信服的理由使用基于 AMQP 的服务器而不是 beanstalkd 或带有 Kue 的 redis?如果是,哪款基于 AMPQ 的服务器最适合我布置的架构?如果不是,哪种 nosql 解决方案(beanstalkd、redis/Kue)最容易设置和部署最快?

最佳答案

FWIW,我还不接受我的回答,我将解释我的决定以及原因。如果我没有得到任何似乎比我决定的更好的答案,我稍后会接受我自己的答案。

我决定选择 Kue。它支持多个异步运行的worker,并且通过集群它可以利用多核系统。它很容易扩展以提供安全性。它以 Redis 为后盾,完全用于这个确切的事情,所以我知道我不会用未经证实的软件支持我的工作流程服务器(这并不是说其他​​任何软件都未经证实。)

我选择 Kue 最令人信服的原因是它提供了 JSON api,以便客户端应用程序(第一个客户端将是基于 Web 的应用程序,但我们也计划制作智能手机应用程序)可以添加工作无需通过面向 Node 实例的主应用程序即可轻松完成,因此在编写本文时,我可以完全避开团队其他成员。我不需要路线,我不需要任何东西,而且都是为我提供的,所以我不需要写任何东西来支持这一点。这还有另一个优点,提供 l/p 安全性的扩展,只有授权的客户端才能添加作业,所以我不必将我的 redis 服务器直接暴露给客户端应用程序。它还有一个内置的 Web 控制台,API 允许客户端很容易地拉回与给定用户关联的作业列表,因此我们可以在一个漂亮的日历 View 中向用户显示他们所有的计划任务,而我的工作是 0 .

另一个令人信服的原因是我没有让 redis 和 Kue 适合我的陡峭学习曲线。之前设置过redis,Kue简单有效。

是的,我是一个懒惰的开发者,但我是一个很好的懒惰开发者。

更新:

我让它工作和工作,吞吐量是惊人的。我将任务编码逻辑拆分到它自己的 Node 实例中,基本上我所要做的就是将我的 repo 部署到一台新机器上并运行 node task-server.js 来扩展我的 worker 。我可能需要添加更多对 Kue 的求职电话,因为我已经实现了一些东西,但这很容易。

关于node.js - 是否有令人信服的理由使用基于 AMQP 的服务器而不是 beanstalkd 或 redis?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10422190/

有关node.js - 是否有令人信服的理由使用基于 AMQP 的服务器而不是 beanstalkd 或 redis?的更多相关文章

  1. ruby - 具有身份验证的私有(private) Ruby Gem 服务器 - 2

    我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..

  2. ruby-on-rails - 使用 rails 4 设计而不更新用户 - 2

    我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它​​不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数

  3. ruby-on-rails - 启动 Rails 服务器时 ImageMagick 的警告 - 2

    最近,当我启动我的Rails服务器时,我收到了一长串警告。虽然它不影响我的应用程序,但我想知道如何解决这些警告。我的估计是imagemagick以某种方式被调用了两次?当我在警告前后检查我的git日志时。我想知道如何解决这个问题。-bcrypt-ruby(3.1.2)-better_errors(1.0.1)+bcrypt(3.1.7)+bcrypt-ruby(3.1.5)-bcrypt(>=3.1.3)+better_errors(1.1.0)bcrypt和imagemagick有关系吗?/Users/rbchris/.rbenv/versions/2.0.0-p247/lib/ru

  4. ruby-on-rails - s3_direct_upload 在生产服务器中不工作 - 2

    在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo

  5. ruby-on-rails - 在 Rails 中调试生产服务器 - 2

    您如何在Rails中的实时服务器上进行有效调试,无论是在测试版/生产服务器上?我试过直接在服务器上修改文件,然后重启应用,但是修改好像没有生效,或者需要很长时间(缓存?)我也试过在本地做“脚本/服务器生产”,但是那很慢另一种选择是编码和部署,但效率很低。有人对他们如何有效地做到这一点有任何见解吗? 最佳答案 我会回答你的问题,即使我不同意这种热修补服务器代码的方式:)首先,你真的确定你已经重启了服务器吗?您可以通过跟踪日志文件来检查它。您更改的代码显示的View可能会被缓存。缓存页面位于tmp/cache文件夹下。您可以尝试手动删除

  6. 【Java 面试合集】HashMap中为什么引入红黑树,而不是AVL树呢 - 2

    HashMap中为什么引入红黑树,而不是AVL树呢1.概述开始学习这个知识点之前我们需要知道,在JDK1.8以及之前,针对HashMap有什么不同。JDK1.7的时候,HashMap的底层实现是数组+链表JDK1.8的时候,HashMap的底层实现是数组+链表+红黑树我们要思考一个问题,为什么要从链表转为红黑树呢。首先先让我们了解下链表有什么不好???2.链表上述的截图其实就是链表的结构,我们来看下链表的增删改查的时间复杂度增:因为链表不是线性结构,所以每次添加的时候,只需要移动一个节点,所以可以理解为复杂度是N(1)删:算法时间复杂度跟增保持一致查:既然是非线性结构,所以查询某一个节点的时候

  7. ruby - 我的 Ruby IRC 机器人没有连接到 IRC 服务器。我究竟做错了什么? - 2

    require"socket"server="irc.rizon.net"port="6667"nick="RubyIRCBot"channel="#0x40"s=TCPSocket.open(server,port)s.print("USERTesting",0)s.print("NICK#{nick}",0)s.print("JOIN#{channel}",0)这个IRC机器人没有连接到IRC服务器,我做错了什么? 最佳答案 失败并显示此消息::irc.shakeababy.net461*USER:Notenoughparame

  8. ruby - Rails 开发服务器、PDFKit 和多线程 - 2

    我有一个使用PDFKit呈现网页的pdf版本的Rails应用程序。我使用Thin作为开发服务器。问题是当我处于开发模式时。当我使用“bundleexecrailss”启动我的服务器并尝试呈现任何PDF时,整个过程会陷入僵局,因为当您呈现PDF时,会向服务器请求一些额外的资源,如图像和css,看起来只有一个线程.如何配置Rails开发服务器以运行多个工作线程?非常感谢。 最佳答案 我找到的最简单的解决方案是unicorn.geminstallunicorn创建一个unicorn.conf:worker_processes3然后使用它:

  9. ruby - 强制浏览器下载文件而不是打开文件 - 2

    我要下载http://foobar.com/song.mp3作为song.mp3,而不是让Chrome在其native中打开它浏览器中的播放器。我怎样才能做到这一点? 最佳答案 您只需要确保发送这些header:Content-Disposition:attachment;filename=song.mp3;Content-Type:application/octet-streamContent-Transfer-Encoding:binarysend_file方法为您完成:get'/:file'do|file|file=File.

  10. ruby TFTP 服务器 - 2

    我将以下代码放在一起用于一个简单的RubyTFTP服务器。它工作正常,因为它监听端口69并且我的TFTP客户端连接到它,我能够将数据包写入test.txt,但我不只是写入数据包,我希望能够从我的客户端通过TFTP传输文件到/temp目录。预先感谢您的帮助!require'socket.so'classTFTPServerdefinitialize(port)@port=portenddefstart@socket=UDPSocket.new@socket.bind('',@port)whiletruepacket=@socket.recvfrom(1024)putspacketFile

随机推荐