父子进程之间的节点Redis Pub/Sub

问题描述 投票:0回答:1

我正在尝试在 Node.JS 中的父进程和子进程之间实现 Pub/Sub。

我使用的是node-redis版本4.6.7和redis服务器版本6.2.12。

我已经构建了一个具有自己的模块的连接对象。它处理与 Redis 的连接,然后返回包装在 Promise 中的连接客户端。

  if (isDev) {
      this.client = createClient({ url: config.REDIS_URL_DEV });
  } else {
      this.client = createClient({ url: config.REDIS_URL_PROD });
  }

  this.promisedClient = new Promise((resolve) => {
       this.client.connect().then(() => {
            resolve(this.client);
       });
  });

我在父进程和子进程中都需要该模块。

在子进程内,我订阅父进程发送消息的通道:

const sub = c.duplicate();

sub.connect().then(() => {
    sub.subscribe('PuppeteerScraper::IN', (source) => { ... here goes my handler code ... })
})

在父进程中,在确定子进程已订阅后,我发布一条消息:

    proc.stdout.on('data', data => {
        const decodedData = data.toString('utf8');

        if (decodedData === 'PuppeteerScraperWorker::Subscribed') {
            client.then(c => {
               c.publish('PuppeteerScraper::IN', JSON.stringify(source));
            })
        }
    })

问题是,子订阅时没有错误,父发布时没有错误。最后子进程收不到数据。

当我打开探查器时,我看到发布命令,但看不到订阅命令。

04:59:29.246 [0 192.168.1.209:24164] "PUBLISH" "PuppeteerScraper::IN" "{"scraper":"Puppeteer","url":"<redacted>"}"

基本上,来自子进程的订阅命令不会显示在分析器中。

redis node-redis
1个回答
0
投票

解决了。结果我没有告诉子进程连接到 dev,所以父进程正在与 DEV 通信,而子进程正在与 PROD 通信。

© www.soinside.com 2019 - 2024. All rights reserved.