Nest.js学习之路(29)-用nestjs建立API Microservice(下)-REDIS、NATS as Messaging System

作者 : 开心源码 本文共3270个字,预计阅读时间需要9分钟 发布时间: 2022-05-13 共184人阅读

redis尽管是key-value的database,但也可以作为microservice服务。

可以参考这篇文章Redis Pub/Sub under the hood

其实redis另外一个功能也可以当作小型的messaging system

除了redis、今天也测试nats,其余支援的如RabbitMQ等就只是差在对port不同,及messaging本身的参数设定不同而已

nestjs提供Transport这个enum,可以很快的切换到不同transport layer,使用同样的API

准备redis & nats server

使用docker来准备这两个Server最快

  • redis
    • 參考redis official dockerfile
    • docker run -d -p 6379:6379 redis
  • nats
    • 參考nats official dockerfile
    • docker run -d –name nats-main -p 4222:4222 -p 6222:6222 -p 8222:8222 nats

docker ps

2018112704.png

Redis as messaging system

先安装redis client包

npm install redis --save

修改app.controller.ts

// api-gateway/src/app.controller.ts@Controller()export class AppController {  // 上一章的仍可以保留  @Client({transport:Transport.TCP, options:{    port:5000, // remote port为5000  }})  client: ClientProxy;  // 指定  @Client({transport:Transport.REDIS, options:{    url:'redis://192.168.99.101:6379',  }})  redisClient: ClientProxy;  // @Client({transport:Transport.NATS, options:{  //   url:'nats://192.168.99.101:4222'  // }})  // natsClient: ClientProxy;  @Get('users')  async getRemoteUsers() {    const pattern = {accountData:'users'};    const data = '';    return await this.client.send(pattern, data);      }  @Get('roles')  async getRemoteRoles() {    const pattern = {accountData:'roles'};    const data = '';    return await this.redisClient.send(pattern, data);  }  @Get('deps')  async getRemoteDeps() {    const pattern = {accountData:'deps'};    const data = '';    return await this.redisClient.send(pattern, data);  }}@Controller()export class AppController {  // 上一章的仍可以保留  @Client({transport:Transport.TCP, options:{    port:5000, // remote port為5000  }})  client: ClientProxy;  // 指定redis server作为messaging协议  // url指定docker redis port  @Client({transport:Transport.REDIS, options:{    url:'redis://192.168.99.101:6379',  }})  redisClient: ClientProxy;  @Get('roles')  async getRemoteRoles() {    const pattern = {accountData:'roles'};    const data = '';    // 获得roles数据    return await this.redisClient.send(pattern, data);  }}

修改src/main.ts

async function bootstrap() {  const app = await NestFactory.createMicroservice(AppModule, { // 改为建立microservice    transport:Transport.REDIS,    options:{      url:'redis://192.168.99.101:6379',      //port: 5000, // Service的port      retryAttempts: 5, // 对外request重试次数      retryDelay: 1000, // 重试间隔    }  });}

我们把@MessagePattern换到role.controller测试

// src/user/controllers/roles.controller.ts@Controller('roles')export class RolesController {    constructor(        private rolesService: RolesService,    ){}    @Get()    @MessagePattern({accountData:'roles'})    getRoles(){        return this.rolesService.getRoles();    }...}

使用postman测试

nats as messaging system

先安装nats client套件

npm install nats –save

修改app.controllers

// api-gateway/src/app.controller.ts@Controller()export class AppController {  ...  // 指定nats server作为messaging协定  // url指定docker-machine ip及nats port  @Client({transport:Transport.NATS, options:{    url:'nats://192.168.99.101:4222'  }})  natsClient: ClientProxy;  ...  @Get('deps')  async getRemoteDeps() {    const pattern = {accountData:'deps'};    const data = '';    return await this.natsClient.send(pattern, data);  }}

修改src/main.ts(或者是要另外建立新的nestjs文件夹也可以)

async function bootstrap() {  const app = await NestFactory.createMicroservice(AppModule, { // 改为建立microservice    //transport:Transport.REDIS,    transport:Transport.NATS,    options:{      // url:'redis://192.168.99.101:6379',      url:'nats://192.168.99.101:4222',      //port: 5000, // Service的port      retryAttempts: 5, // 对外request重试次数      retryDelay: 1000, //     }  });}

套用@MessagePattern在user.controller.ts

使用postman测试,没问题。

开打浏览器输入docker-machine ip并指定port 8222可以看到nats提供基本http monitoring

2018112705.png

推荐一下我的公众号: 【 geekjc 】,微信号: 【 c8706288 】一起学习交流编程知识,分享经验,各种有趣的事。

tuiguang.png

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » Nest.js学习之路(29)-用nestjs建立API Microservice(下)-REDIS、NATS as Messaging System

发表回复