NestJS - 基于 Redis 的微服务
由 Mux 赞助的 DEV 全球展示挑战赛:展示你的项目!
上周我们探讨了如何创建单体仓库(Monorepo)以及如何设置仅通过 TCP 连接的微服务。本文将在此基础上进行拓展!
如果你错过了,请点击这里
安装 Redis
什么是 Redis:
Redis 是一个开源(BSD 许可)的内存数据结构存储系统,可用作数据库、缓存和消息代理。它支持多种数据结构,例如字符串、哈希表、列表、集合、带范围查询的有序集合、位图、HyperLogLog、带半径查询的地理空间索引和流。
这话说得有点长。我们来简单分析一下。
“内存中”意味着 Redis 的所有数据都存储在内存(RAM)中运行和存储,因此运行速度极快。“数据结构存储”可以理解为数据库。消息代理可以接收一种格式的消息,并将其以相应的格式发送给接收者。想象一下,有三个人只会说德语,一个人只会说英语,第三个人会说德语和英语。这第三个人就像一个消息代理,负责将英语消息翻译成德语,反之亦然。
Redis 的功能远不止这些,但我们将把它用作消息代理。
我使用 WSL(2) 进行开发,在 Ubuntu/Debian 上安装 Redis 服务器非常简单。只需运行以下命令:
sudo apt install redis-server
就这样!你的操作系统上也应该可以安装 Redis 服务器了!
现在我们需要启动 Redis。
#On WSL
sudo service redis-server start
#On Ubuntu
sudo systemctl redis-server start
让我们将“Hello dev.to!”存储到 Redis 数据库中。
为此,我们可以输入redis-cli:
redis-cli
现在你应该看到类似这样的内容:
127.0.0.1:6379>
我们现在可以输入:
set test "Hello dev.to!"
我们需要OK从 Redis 获取一个返回
值。要检索该值,我们只需输入:
get test
现在你应该能看到Hello dev.to!。很好,我们的 Redis 服务器正在运行!让我们用以下命令退出它:
exit
在 NestJS 中使用 Redis 发送消息
首先,我们需要将该redis软件包添加到我们的项目中:
yarn add redis
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();
我们刚刚将传输选项从更改TCP为REDIS,当然,现在我们需要更改服务器。
第二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();
}
}
这里,我们只是将ClientProxyFactory.create函数链接到与之前相同的值。在更大的项目中,这不应该硬编码,而应该通过参数传递env。
现在我们只需要再次运行我们的服务,应该就会看到和上次一样的消息!
希望你喜欢这篇文章!如果你想看到后续内容,请评论、点赞和分享。这样我就知道你对这类内容感兴趣了!
👋打个招呼! Instagram | Twitter | LinkedIn | Medium | Twitch | YouTube
文章来源:https://dev.to/lampewebdev/nestjs-microservices-with-redis-996
