发布于 2026-01-06 0 阅读
0

NestJS - Microservices with Redis DEV's Worldwide Show and Tell Challenge Presented by Mux: Pitch Your Projects!

NestJS - 基于 Redis 的微服务

由 Mux 赞助的 DEV 全球展示挑战赛:展示你的项目!

上周我们探讨了如何创建单体仓库(Monorepo)以及如何设置仅通过 TCP 连接的微服务。本文将在此基础上进行拓展!

如果你错过了,请点击这里

安装 Redis

什么是 Redis:

Redis 是一个开源(BSD 许可)的内存数据结构存储系统,可用作数据库、缓存和消息代理。它支持多种数据结构,例如字符串、哈希表、列表、集合、带范围查询的有序集合、位图、HyperLogLog、带半径查询的地理空间索引和流。

这话说得有点长。我们来简单分析一下。

“内存中”意味着 Redis 的所有数据都存储在内存(RAM)中运行和存储,因此运行速度极快。“数据结构存储”可以理解为数据库。消息代理可以接收一种格式的消息,并将其以相应的格式发送给接收者。想象一下,有三个人只会说德语,一个人只会说英语,第三个人会说德语和英语。这第三个人就像一个消息代理,负责将英语消息翻译成德语,反之亦然。

Redis 的功能远不止这些,但我们将把它用作消息代理。

我使用 WSL(2) 进行开发,在 Ubuntu/Debian 上安装 Redis 服务器非常简单。只需运行以下命令:



sudo apt install redis-server


Enter fullscreen mode Exit fullscreen mode

就这样!你的操作系统上也应该可以安装 Redis 服务器了!

现在我们需要启动 Redis。



#On WSL
sudo service redis-server start
#On Ubuntu
sudo systemctl redis-server start


Enter fullscreen mode Exit fullscreen mode

让我们将“Hello dev.to!”存储到 Redis 数据库中。
为此,我们可以输入redis-cli



redis-cli


Enter fullscreen mode Exit fullscreen mode

现在你应该看到类似这样的内容:



127.0.0.1:6379>


Enter fullscreen mode Exit fullscreen mode

我们现在可以输入:



set test "Hello dev.to!"


Enter fullscreen mode Exit fullscreen mode

我们需要OK从 Redis 获取一个返回
值。要检索该值,我们只需输入:



get test


Enter fullscreen mode Exit fullscreen mode

现在你应该能看到Hello dev.to!。很好,我们的 Redis 服务器正在运行!让我们用以下命令退出它:



exit


Enter fullscreen mode Exit fullscreen mode

在 NestJS 中使用 Redis 发送消息

首先,我们需要将该redis软件包添加到我们的项目中:



yarn add redis


Enter fullscreen mode Exit fullscreen mode

Redis 安装完毕后,我们只需要修改 2 个文件!没错,我们只需要修改 2 个文件!是不是很神奇?那就开始吧!

第一的apps/blog/src/main.ts



import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { Transport } from '@nestjs/microservices';
import { Logger } from '@nestjs/common';

const logger = new Logger('Blog');

async function bootstrap() {
  const app = await NestFactory.createMicroservice(AppModule, {
    transport: Transport.REDIS,
    options: {
      url: 'redis://localhost:6379',
    },
  });
  await app.listen(() => logger.log('Microservice is listening'));
}
bootstrap();


Enter fullscreen mode Exit fullscreen mode

我们刚刚将传输选项从更改TCPREDIS,当然,现在我们需要更改服务器。

第二apps/lampeweb/src/app.service.ts



import { Injectable } from '@nestjs/common';
import {
  ClientProxyFactory,
  Transport,
  ClientProxy,
} from '@nestjs/microservices';

@Injectable()
export class AppService {
  private client: ClientProxy;

  constructor() {
    this.client = ClientProxyFactory.create({
      transport: Transport.REDIS,
      options: {
        url: 'redis://localhost:6379',
      }
    });
  }

  public getHello(): Promise<string> {
    return this.client.send<string, string>('getHello', 'Michael').toPromise();
  }
}


Enter fullscreen mode Exit fullscreen mode

这里,我们只是将ClientProxyFactory.create函数链接到与之前相同的值。在更大的项目中,这不应该硬编码,而应该通过参数传递env

现在我们只需要再次运行我们的服务,应该就会看到和上次一样的消息!

希望你喜欢这篇文章!如果你想看到后续内容,请评论、点赞和分享。这样我就知道你对这类内容感兴趣了!

👋打个招呼! Instagram | Twitter | LinkedIn | Medium | Twitch | YouTube

文章来源:https://dev.to/lampewebdev/nestjs-microservices-with-redis-996