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