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
Nestjs 微服务的更多相关文章
- NodeJS 基于 Dapr 构建云原生微服务应用,从 0 到 1 快速上手指南
Dapr 是一个可移植的.事件驱动的运行时,它使任何开发人员能够轻松构建出弹性的.无状态和有状态的应用程序,并可运行在云平台或边缘计算中,它同时也支持多种编程语言和开发框架.Dapr 确保开发人员专注 ...
- 高大上的微服务可以很简单,使用node写微服务
安装 npm install m-service --save 使用 编写服务处理函数 // dir1/file1.js // 使用传入的console参数输出可以自动在日志里带上request id ...
- 微服务与Docker介绍
什么是微服务 微服务应用的一个最大的优点是,它们往往比传统的应用程序更有效地利用计算资源.这是因为它们通过扩展组件来处理功能瓶颈问题.这样一来,开发人员只需要为额外的组件部署计算资源,而不需要部署一个 ...
- 我所理解的SOA和微服务
本文原创,原文地址为:http://www.cnblogs.com/fengzheng/p/5847441.html SOA和微服务到底是什么关系? 说实话,我确实不明白SOA和微服务到底有什么本质上 ...
- CI Weekly #5 | 微服务架构下的持续部署与交付
CI Weekly 围绕『 软件工程效率提升』 进行一系列技术内容分享,包括国内外持续集成.持续交付,持续部署.自动化测试. DevOps 等实践教程.工具与资源,以及一些工程师文化相关的程序员 Ti ...
- 微服务和SOA服务
微服务和SOA都被认为是基于服务的架构,这意味着这两种架构模式都非常强调将“服务”作为其架构中的首要组件,用于实现各种功能(包括业务层面和非业务层面).微服务和SOA是两种差异很大的架构模式,但是他们 ...
- 【DDD/CQRS/微服务架构案例】在Ubuntu 14.04.4 LTS中运行WeText项目的服务端
在<WeText项目:一个基于.NET实现的DDD.CQRS与微服务架构的演示案例>文章中,我介绍了自己用Visual Studio 2015(C# 6.0 with .NET Frame ...
- WeText项目:一个基于.NET实现的DDD、CQRS与微服务架构的演示案例
最近出于工作需要,了解了一下微服务架构(Microservice Architecture,MSA).我经过两周业余时间的努力,凭着自己对微服务架构的理解,从无到有,基于.NET打造了一个演示微服务架 ...
- 微服务(Microservices)—Martin Fowler【翻译】
本文转载自:http://www.cnblogs.com/liuning8023/p/4493156.html -------------------------------------------- ...
随机推荐
- ACM-ICPC 2018 徐州赛区网络预赛 B BE, GE or NE(记忆化搜索)
https://nanti.jisuanke.com/t/31454 题意 两个人玩游戏,最初数字为m,有n轮,每轮三个操作给出a b c,a>0表示可以让当前数字加上a,b>0表示可以让 ...
- Docker下安装Jenkins
Docker安装参见:https://www.cnblogs.com/hackyo/p/9280042.html 安装Jenkins: docker run \ -u root \ --rm \ -d ...
- [物理学与PDEs]第2章习题8 一维定常粘性不可压缩流体的求解
考察固定在 $y=0$ 与 $y=1$ 处两个平板之间的定常粘性不可压缩流体沿 $x$ 方向的流动. 设 $p=p(x)$, 且已知 $p(0) =p_1$, $p(L)=p_2$, $p_1> ...
- Factorized TDNN(因子分解TDNN,TDNN-F)
论文 Povey, D., Cheng, G., Wang, Y., Li, K., Xu, H., Yarmohamadi, M., & Khudanpur, S. (2018). Semi ...
- dubbo启动时检查服务
Dubbo 缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止 Spring 初始化完成,以便上线时,能及早发现问题,默认 check="true". 可以通过 che ...
- cartographer 点云同步处理
1.点云同步处理的类 RangeDataCollator class RangeDataCollator { public: explicit RangeDataCollator( const st ...
- 斜率优化dp 的简单入门
不想写什么详细的讲解了...而且也觉得自己很难写过某大佬(大米饼),于是建议把他的 blog 先看一遍,然后自己加了几道题目以及解析...顺便建议看看算法竞赛(蓝皮书)的 0x5A 斜率优化(P294 ...
- 008_tcp探测
一. 线上出现了监控指标抖动,netscaler心跳监测的问题,如下图: 二.工具如下: 原理参考:https://www.dearcodes.com/index.php/archives/17/ N ...
- Linux Vi 的使用
进入vi的命令 vi filename :打开或新建文件,并将光标置于第一行首 vi +n filename :打开文件,并将光标置于第n行首 vi + filename :打开文件,并将光标置于最后 ...
- Vue相关目录
cli入门-项目搭建 组件 Router路由 生命周期 数据监听 cli搭建web服务介绍 vuex和axios介绍