当前位置: 首页 > 知识库问答 >
问题:

节点中的Redis队列。js集群环境

司马奇希
2023-03-14

使用节点。js集群支持,我希望主进程生成添加到Redis队列的数据项。然后,我想运行多个读取Redis队列的工作进程。当然,只有一个工作进程应该使用从队列中检索到的数据项。

为了让我开始学习,您能建议从节点包支持或原始Redis命令的角度来完成这项工作吗?让我强调一下,消费者是节点中独立的进程。js集群环境,我们可以在其中调整竞争从单个Redis队列读取的工作进程的数量,以调整整体系统性能。

共有1个答案

姚培
2023-03-14

看来kue正是我们需要的。

通过节点中的Redis将测试程序排队任务降至最低。js群集环境:

// cluster-queue.js

var kue     = require('kue');
var cluster = require('cluster');

var numWorkers  = process.argv[2];
var numParallel = process.argv[3];
var jobDelay    = process.argv[4];
var numJobs     = process.argv[5];

if (process.argv.length !== 6) {
  console.log('Usage: node cluster-work-queue <numWorkers> <numParallel> <jobDelay> <numJobs>');
  process.exit(1);
}

var jobs = kue.createQueue();

var jobType = 'someTask';

if (cluster.isMaster) {
  for (var i = 0; i < numWorkers; i++) {
    cluster.fork();
  }
  for (var j = 0; j < numJobs; j++) {
    (function(count) {
      var data = { count: count };
      jobs.create(jobType, data).save(function(err) {
        if (err) {
          console.log('jobs.create', err);
        } else {
          console.log('master', 'jobs.create', count);
        }
      });
    })(j);
  }
} else {
  jobs.process(jobType, numParallel, function(job, done){
    console.log('worker', cluster.worker.id, 'jobs.process', job.data);
    setTimeout(function() { done(); }, jobDelay);
  });
}

示例运行(注意用于调整工人数量等的命令行选项):

[jfathman@cloud node]$ node cluster-queue.js 2 1 20 10
master jobs.create 0
master jobs.create 1
master jobs.create 2
master jobs.create 3
master jobs.create 4
master jobs.create 5
master jobs.create 6
master jobs.create 7
master jobs.create 8
master jobs.create 9
worker 1 jobs.process { count: 0 }
worker 2 jobs.process { count: 1 }
worker 1 jobs.process { count: 2 }
worker 2 jobs.process { count: 3 }
worker 1 jobs.process { count: 4 }
worker 2 jobs.process { count: 5 }
worker 1 jobs.process { count: 6 }
worker 2 jobs.process { count: 7 }
worker 1 jobs.process { count: 8 }
worker 2 jobs.process { count: 9 }
^C
 类似资料:
  • 我正在开发一个使用Redis的API,它托管在ElastiCache上,有三个节点(一个主节点,两个副本)。周末,由于某种原因,主节点被切换到节点002(从001),这导致我的应用程序在尝试向Redis发送消息时出现只读错误。 有什么理由不手动操作就可以做到这一点?

  • Redis 集群(Redis Cluster) 是 Redis 提供的分布式数据库方案。 既然是分布式,自然具备分布式系统的基本特性:可扩展、高可用、一致性。 Redis 集群通过划分 hash 槽来分片,进行数据分享。 Redis 集群采用主从模型,提供复制和故障转移功能,来保证 Redis 集群的高可用。 根据 CAP 理论,Consistency、Availability、Partition

  • 我需要在不同的机器上配置一个Kafka集群,但它不起作用,当我启动生产者和消费者时,将显示以下错误: 你能帮帮我吗。

  • 因为每个 Disque 节点都会将自己的配置信息储存在 disque-server 运行的文件夹里面, 而同一个文件夹只能有一份这样的配置信息, 所以如果我们打算同时运行多个节点, 那么就必须在不同的文件夹里面运行 disque-server , 并为每个节点指定不同的端口。 假设我们现在打算运行三个 Disque 节点, 那么首先要做的就是创建三个文件夹, 然后分别在这些文件夹里面运行 disq

  • Disque 以集群模式运行, 每个服务器都是集群中的一个节点, 用户可以运行任意数量的节点, 只要确保每个节点的端口号不同即可。 在默认情况下, 运行 Disque 服务器程序 disque-server 将启动一个端口号为 7711 的 Disque 节点: $ ./disque-server 528:C 28 Apr 11:50:08.519 # Warning: no config fil

  • 本文档介绍用 3 台服务器构建 Seafile 高可用集群的架构。这里介绍的架构仅能实现“服务高可用”,而不能支持通过扩展更多的节点来提升服务性能。如果您需要“可扩展 + 高可用”的方案,请参考Seafile 可扩展集群文档。 在这种高可用架构中包含3个主要的系统部件: Seafile 服务器:提供 Seafile 服务的软件 MariaDB 数据库集群:保存小部分的 Seafile 元数据,比如