在heroku上使用node.js开发时钟和workers

2023-12-19

我正在开发一项服务,需要每五分钟为不同的用户分析来自社交媒体网络的数据。我正在使用 node.js 开发它,并将在 Heroku 上实现它。

根据本文 https://devcenter.heroku.com/articles/scheduled-jobs-custom-clock-processes在 Heroku 网站上,最好的方法是将调度程序的逻辑与工作线程的逻辑分开。事实上,我们的想法是拥有一个专用于安排任务的测功机以避免重复。该测功机指示一组工人(根据需要有 n 个测功机)执行任务。

这是该架构的 procfile:

web:    node web.js
worker: node worker.js
clock:  node clock.js

问题是如何在node.js中实现。我用 google 搜索了一下,建议是使用消息队列系统(如 IronMQ、RabbitMQ 或 CloudAMQP)。但我试图将我的代码和应用程​​序设置得简单,并且只需要很少的附加组件。

问题是:有没有办法直接从我的调度程序(时钟)与工作测功机进行通信?

感谢您的回答。


Heroku dynos 没有固定的 IP 地址,因此无法在它们之间建立直接连接。这就是为什么您需要创建一个具有静态 IP 或其他固定端点的单独服务器实例作为中间人。

您至少有两个可行的选择:RabbitMQ 类型的消息队列,或使用 pub-sub redis feed 的精简版本。我通常使用后者,因为它快速、简单且足够强大,可以满足我的所有需求(例如,如果消息千载难逢地丢失,也没什么大不了的)。但是,如果您必须不丢失消息,则应该使用成熟的消息队列,例如 RabbitMQ。

设置 redis 实现非常简单。有几个 Redis 附加组件(我使用 RedisCloud)提供免费且廉价的计划。当您配置它们时,您将获得一个要连接的端点和一个密码。然后,您只需将 Web dyno 和 Worker dyno 连接到 Redis 实例,以便您的 Web 应用程序将任务发布到频道,并且 Worker 订阅该频道。

如果您需要 Web 应用程序在任务完成后与客户端进行通信,您只需创建另一个通道,让 Worker 发布任务完成消息,并让 Web 应用程序监听这些消息。

您永远不会遇到重复的任务,因为每次工作人员收到一条消息时,它就会从队列中弹出。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在heroku上使用node.js开发时钟和workers 的相关文章

  • 如何将 node_modules 包含在单独的 browserify 供应商包中

    我正在尝试将 AngularJS 应用程序转换为使用 browserify 我已经使用 napa 在 node modules 中安装了所有的 Bower 包 现在我想将它们浏览到一个单独的供应商包中 并将它们声明为 外部 依赖项 我想给他
  • Nginx - Heroku Docker - 是否可以在 Heroku 上运行 Nginx 作为反向代理

    我试图弄清楚如何使用 Nginx 在 Heroku 应用程序上构建反向代理 问题是 Heroku 似乎每个应用程序只接受一个容器 但我的应用程序系统至少会使用三个容器 一个用于 Nginx 一个用于我的应用程序前端 一个用于我的业务逻辑服务
  • 模拟节点外部模块默认使用 jest 的链式方法

    在我们的节点 CLI 中 我们有一个简单的方法 use strict const ora require ora module exports function startSpinner textOnStart color spinnerT
  • 如何从 Node.js 中的 Http.IncomingMessage 检测 http 与 https

    给定一个Http IncomingMessage由一个创建http s Server为了响应请求 检测请求是否是 http 与 https 的正确 推荐方法是什么 一些我不知道的随机想法是否正确 检查端口 seems wrong might
  • NodeJS:将 JSON 保存到 MongoDB

    我正在尝试从 API 获取 JSON 并将其存储到 MongoDB 数据库中 显然 这是行不通的 我的应用程序似乎停留在我尝试将数据保存到数据库的位置 请告知该怎么做 这是我的代码 var express require express v
  • npm install 不起作用,抛出错误

    我正在尝试在 nodejs 中安装 yo 和其他一些软件包 但是我不断收到错误 我是节点新手 所以我有点迷失 我运行的是 Mac OS X 10 10 3 我正在使用的命令是 sudo npm install global yo 这样做会给
  • Google API、drive.files.list 和仅返回子文件

    我正在使用 谷歌API https www npmjs com package googleapis NodeJS 中的库 我试图返回当前指定文件夹中的文件和文件夹列表 但我发现drive files list返回用户已被授予读取权限的所有
  • TypeError [ERR_INVALID_ARG_TYPE]:“listener”参数必须是 Function 类型

    我这里有一个小问题 events js 200抛出新错误 ERR INVALID ARG TYPE listener Function listener 类型错误 ERR INVALID ARG TYPE 侦听器 参数必须是类型 功能 收到
  • Laravel Homestead 中 npm 安装错误有解决方案吗?

    Windows 10 家园 虚拟盒6 0 8 流浪者2 2 5 节点 v12 5 0 npm v6 10 1 我想做的就是在新安装的 Laravel 应用程序中执行 npm install 命令 但我不断收到错误 经过两天的谷歌搜索并尝试了
  • Sails.js - 如何更新嵌套模型

    attributes username type email validated by the ORM required true password type string required true profile firstname s
  • 无法使用 webpack 加载 Node 原生插件

    虽然我正在使用vue cli在生成 webpack 配置的示例代码中 没有任何特定于 vue 的内容 我像这样创建示例应用程序 vue init webpack webpack modules example 生成webpack base
  • 使用 Socket.IO 时如何访问会话标识符?

    我有一个聊天 我需要管理独特的连接 我四处搜寻 但我找到的解决方案似乎都已被弃用 那么 如何使用 Socket IO 获取套接字的会话 ID 我在用着Node js http en wikipedia org wiki Node js Ex
  • 如何获取knex / mysql中所有更新记录的列表

    这是我正在处理的查询 return knex table returning id where boolean false andWhere fooID foo id update boolean true limit num then f
  • 使用 TFS 2015 运行 Jest 单元测试

    有人尝试将 jest 单元测试与 TFS 2015 集成吗 我尝试使用 Chutzpah 测试适配器 https visualstudiogallery msdn microsoft com f8741f04 bae4 4900 81c7
  • 使用 Nodemailer 提交电子邮件时 NodeJs 错误

    我已按照以下步骤设置 Nodemailer 1 允许访问 Gmail 中安全性较低的应用程序 2 在app js中写入以下内容 app post reachus send function req res var transporter n
  • 在 mongodb 和 nodejs 中对博客和评级进行建模

    我有一个博客集合 其中包含用户给予的标题 正文和综合评分 另一个集合 评级 其架构引用了博客 以对象 ID 的形式对博客进行评级 如果有的话 的用户以及他们给出的评级 即 1 或 1 当特定用户按照 最新优先 的顺序浏览博客时 比如每页 4
  • NodeJs 环境变量与配置文件

    实际上 我有一个 NodeJS Express 应用程序 其配置文件包含主机 端口 JWT 令牌 数据库参数等参数 问题是 将这些参数直接保留在环境变量上 没有任何配置文件 并访问它们 而不需要在所有组件和模块中进行 require 配置是
  • 策略模式还是命令模式?

    假设我有一个金融交易列表 我需要针对这些交易执行一系列验证规则 一个例子是我有一笔购买产品的交易 但是首先我需要验证交易中的帐户是否有足够的可用资金 产品没有售完等 由于这些规则 交易将是标记为拒绝 并应指定错误代码 当然 我正在考虑用一个
  • linq2sql,存储库模式 - 如何从两个或多个表查询数据?

    我使用存储库模式 和 linq2sql 作为数据访问 并拥有例如 ProductsRep 和 CustomersRep 在非常简单的场景中 数据库有两个表 产品 产品 ID 客户 ID 产品名称 日期 和顾客 客户 ID 名字 姓氏 每个存
  • Heroku 与 django 通道的正确 procfile/要求是什么?

    tl dr django 频道应用程序在本地使用 manage py runserver 运行 但不在 heroku 上运行 我是 django 通道的新手 尝试使用 heroku 通道部署一个非常基本的 django 应用程序 我最初使用

随机推荐

  • 我可以同时使用 body-parser 和 Formidable 吗?

    我试图解决一个问题几天 但无法理解一些事情 我有一个使用 NodeJS 和 ExpressJS 创建的网站 为了处理表单 我使用 body parser var adName req body adName var adMessage re
  • 如何以编程方式获取最小化应用程序的屏幕截图?

    我正在尝试获取最小化应用程序的屏幕截图 关于如何在 Windows 下进行此操作有什么想法吗 我正在使用 C 提前谢谢 何塞 恢复 截图 最小化 如果它不在屏幕上 我不知道如何复制图像
  • 如何在表视图中的单元格中创建部分?

    我正在创建收据视图 为此我使用表格视图 我创建了多个单元来实现此功能 这是我使用多个单元格的代码 if indexPath section 4 let cell ProductSummaryTitleCell self tblCategor
  • com.android.camera.action.CROP 不适用于 Android jelly bean 4.3 吗?

    我在使用相机拍照后使用 com android camera action CROP 进行裁剪 下面是我的代码 它在 4 3 之前可以正常工作 Intent cropIntent new Intent com android camera
  • 导致错误的相关小部件是 Scaffold

    class NavBarState extends State
  • EF 4.1 映射问题

    我有一个与其自身有关系的类 public class Person public long ID get set public string Name get set public virtual Person Mother get set
  • 根据 Pandas 中的另一列连接一组列值

    给定一个 Pandas 数据框 其中有一些标记的系列 例如Name and Villain 假设数据框具有以下值 Name 蝙蝠侠 蝙蝠侠 蜘蛛侠 蜘蛛侠 蜘蛛侠 蜘蛛侠 Villain 小丑 贝恩 绿魔 电光 毒液 章鱼博士 总共 上述数
  • 如何在 codeigniter 中使用自定义字体和图标

    猛击大家 我想在我的视图中使用来自 flaticon com 的自定义图标 中的图标http successpermis com css flaticon html http successpermis com css flaticon h
  • Android 服务读取 localStorage?

    我为 Android 开发了一个 PhoneGap 应用程序 该应用程序由以下部分组成webapp HTML jQuery 和后台服务 Java 代码 由 web 应用程序启动 这个网络应用程序写入窗口本地存储 like 可以读这个吗nam
  • html页面无法通过libcurl获取cookie

    我修改了之前的代码 有兴趣的话可以看我之前的帖子通过curl设置cookie https stackoverflow com questions 6007225 setting cookie through curl但这是一个新的开始我的新
  • Appcelerator 应用程序无法重新启动 (Android)

    我创建了一个应用程序 一切正常 但是 当我按回键关闭应用程序 bij 并再次打开该应用程序时 它不会通过启动屏幕 如果我通过 Android 运行应用程序屏幕完全关闭该应用程序 它会再次正常打开 以前有人遇到过这个问题吗 提前致谢 将您的应
  • 元素随机排列且 maxOccurs > 1

    我需要创建一个XSD1 0 验证XML file 验证将使用lxml etree from python 并且该工具仅支持 XML Schema 1 0 lxml 与模式 1 1 https stackoverflow com questi
  • Angular 2 中的动态模板和 templateURL

    每当我必须在页面中动态包含模板时 我就一直在 Angular 1 中使用 ng include 现在如何在 Angular 2 中实现这一点 我尝试搜索并找到了这些 https groups google com forum topic a
  • Django 选择查询时间差异

    我正在尝试查询 django 中的数据库表 其中包括以下列 id start time end time 我可以直接在查询中获取差异 而不是获取两者的单独值吗 有这样的效果 SELECT id Diff start time end tim
  • 从 shell 脚本在 Firefox 的特定实例中打开新选项卡

    我有一个 shell 脚本 可以创建 Firefox 配置文件 然后使用它们同时打开多个 Firefox 实例 问题是如何在特定的 Firefox 实例中打开 URL 我努力了 firefox CREATEPROFILE test fire
  • 如何自动启动/预热 IIS 中托管的 .net core Web 应用程序

    我有一个 net core 3 1 Web 应用程序 托管在 IIS 上 我无法弄清楚如何在第一个请求之前运行一段代码 我做了以下事情 设置应用程序池的 启动模式 AlwaysRunning 和 空闲超时 0 在网站上设置 预加载已启用 t
  • 有关 SP 和 UDF 的帮助吗?

    我正在尝试通过 MySQL 和 PHP 学习和使用 SP 存储过程 和 UDF 用户定义函数 SP和UDF有什么区别 用途是什么 一段简单的代码在 PHP 和 SQL 中会是什么样子 其中 SP 正在更新 写入或从 MySQL 数据库的表中
  • 为什么应用程序通常不使用 int 在内部表示货币值?

    为什么应用程序通常不使用整数数据类型 例如int or long在 C Java C 中 在内部表示货币值 而不是使用浮点数据类型 float double 或者类似Java的BigDecimal 例如 如果我正在编写一个 Java 应用程
  • 在移动 safari 中是否有使用 onbeforeunload 的替代方法?

    在 mobile safari 中是否有替代方法可以代替 onbeforeunload 我注意到 Google 能够捕获onbeforeunloadmobile safari 中的事件 有谁知道他们是怎么做到的吗 谷歌能够使用他们的 Gma
  • 在heroku上使用node.js开发时钟和workers

    我正在开发一项服务 需要每五分钟为不同的用户分析来自社交媒体网络的数据 我正在使用 node js 开发它 并将在 Heroku 上实现它 根据本文 https devcenter heroku com articles scheduled