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

qaxu7uf2  于 2023-10-15  发布在  Redis
关注(0)|答案(1)|浏览(166)

我正在尝试在Node.JS中实现父进程和子进程之间的发布/订阅。
我使用的是node-redis版本4.6.7和redis服务器版本6.2.12。
我构建了一个Connection对象,它有自己的模块。它处理与redis的连接,然后返回 Package 在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));
            })
        }
    })

问题是,子订阅时没有错误,父发布时没有错误。最后,子进程不接收数据。
当我打开探查器时,我看到了publish命令,但没有subscribe命令。

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

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

wlwcrazw

wlwcrazw1#

解决了。原来我没有告诉子进程连接到dev,所以父进程在和DEV对话,而子进程在和PROD对话。

相关问题