当前位置: 首页 > news >正文

next 微服务

Nestjs 微服务

文档
工作示例

安装:

$ npm i --save @nestjs/microservices

main.ts

import { NestFactory } from '@nestjs/core';
import { Transport } from '@nestjs/microservices';

import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  app.connectMicroservice({
    transport: Transport.TCP,
  });

  await app.startAllMicroservicesAsync();
  await app.listen(5000);
}
bootstrap();

app.controller.ts

import { Controller, Get, Query, UsePipes } from '@nestjs/common';
import {
  MessagePattern,
  Client,
  Transport,
  ClientProxy,
} from '@nestjs/microservices';
import { AppService } from './app.service';

import { Observable, from } from 'rxjs';

import { ValidationPipe } from './validation.pipe';

@Controller()
export class AppController {
  @Client({ transport: Transport.TCP })
  client: ClientProxy;

  constructor(private readonly appService: AppService) {}

  @UsePipes(new ValidationPipe())
  @Get()
  getHello(@Query('data') data): Observable<number> {
    // const pattern = { cmd: 'sumObservable' };
    // const pattern = { cmd: 'sumAsync' };
    const pattern = { cmd: 'sum' };

    // 使用 send 调用微服务
    const r = this.client.send<number>(pattern, data);
    return r;
  }

  @MessagePattern({ cmd: 'sum' })
  sum(data: number[]): number {
    return data.reduce((acc, el) => acc + el);
  }

  // 返回promise异步响应
  @MessagePattern({ cmd: 'sumAsync' })
  sumAsync(data: number[]): Promise<number> {
    const result = data.reduce((acc, el) => acc + el) + 1;
    return Promise.resolve(result);
  }

  // 程序将响应3次
  @MessagePattern({ cmd: 'sumObservable' })
  sumObservable(data: number[]): Observable<number> {
    return from([1, 2, 3]);
  }
}

validation.pipe.ts

import {
  PipeTransform,
  Injectable,
  ArgumentMetadata,
  PayloadTooLargeException,
  BadRequestException,
} from '@nestjs/common';

@Injectable()
export class ValidationPipe implements PipeTransform {
  transform(value: any, metadata: ArgumentMetadata) {
    if (metadata.type === 'query') {
      try {
        return JSON.parse(value);
      } catch (error) {
        throw new BadRequestException();
      }
    } else {
      throw new PayloadTooLargeException();
    }
  }
}

http://localhost:5000/?data=[1,2, 3] // 6

相关文章:

  • 服务器拉取git代码
  • 专用来回TOO OLD的用的火星帖,今天翻出来又再感叹一下!
  • [技术娱乐]How to make love
  • [Nginx]反向代理Node将3000端口访问转换成80端口
  • nginx报错nginx: [error] open() “/run/nginx.pid” failed (2: No such file or directory)
  • 大连出现今年首次浮尘天气 全市大气重度污染
  • Nginx重启时提示nginx: [emerg] bind() to 0.0.0.0解决方法 老蒋 发布于 2019-06-03 分类:运维笔记 评论(0) 2000+站长交流QQ群: 59
  • 个人签名备份一下
  • create-react-app安装react项目,yurn一直报错 create-react-app安装react项目,yurn一直报错,错误如下图
  • 时空数据模型简介
  • mysql 5.7.18版本安装说明
  • mysql 5.7.28版本安装说明
  • 被人点名骂了一通
  • 浏览器数据库 IndexedDB 入门教程
  • 本是同根生,相煎何太急
  • [译] 怎样写一个基础的编译器
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 03Go 类型总结
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • JAVA之继承和多态
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • spring boot下thymeleaf全局静态变量配置
  • V4L2视频输入框架概述
  • 不上全站https的网站你们就等着被恶心死吧
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 初识 beanstalkd
  • 仿天猫超市收藏抛物线动画工具库
  • 思维导图—你不知道的JavaScript中卷
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • #{}和${}的区别?
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (编译到47%失败)to be deleted
  • (二)c52学习之旅-简单了解单片机
  • (附源码)springboot教学评价 毕业设计 641310
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (剑指Offer)面试题34:丑数
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (四)图像的%2线性拉伸
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (一)WLAN定义和基本架构转
  • .bat文件调用java类的main方法
  • .Net 6.0 处理跨域的方式
  • .NET Project Open Day(2011.11.13)
  • .net 提取注释生成API文档 帮助文档
  • .Net环境下的缓存技术介绍
  • .net连接MySQL的方法
  • .Net中的集合
  • .NET中使用Protobuffer 实现序列化和反序列化
  • ::前边啥也没有