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 -------------------------------------------- ...
随机推荐
- 如何使用多数据源,同时使用jpa和jdbctemplate
spring: datasource: first: type: com.alibaba.druid.pool.DruidDataSource url: jdbc:mysql://xx.xx.xx.x ...
- 基于vue cli 3.0创建前端项目并安装cube-ui
前提条件: 安装node.js. 国内的开发者最好先配置淘宝镜像. 之后用cnpm来代替npm命令. 项目创建过程: 打开cmd,输入命令进入目标工作空间,以本机项目为例: cd /d d: cd D ...
- TP5报错
Array to string conversion 数组不能用echo来输出,可使用var_dump().dump()或print_r()
- Spring Cloud Context模块
SpringCloud这个框架本身是建立在SpringBoot基础之上的,所以使用SpringCloud的方式与SpringBoot相仿.也是通过类似如下代码进行启动. SpringApplicati ...
- 搬运,B站up主『凉风有性胖次君』日日日日日日日日日日在校园
这个视频超有毒,简直丧心病狂,我竟无言以对,凉风是有多大的耐性,搜集了这么多元素,哈哈哈~~~赶紧搬运,怕哪天B站都给封了 也就是说世界本来喜欢的是言叶,但是言叶爱上了一直在电车上暗恋她的诚哥,于是世 ...
- zabbix3.2监控rabbitmq集群
监控模板和脚本github地址:https://github.com/jasonmcintosh/rabbitmq-zabbix/tree/master/scripts/rabbitmq .将rabb ...
- 【原创】大叔经验分享(7)创建hive表时格式如何选择
常用格式 textfile 需要定义分隔符,占用空间大,读写效率最低,非常容易发生冲突(分隔符)的一种格式,基本上只有需要导入数据的时候才会使用,比如导入csv文件: ROW FORMAT DELIM ...
- C++入门篇四
常量引用:形参不能修改,节省开辟内存空间的开销 用一级指针代替二级指针常量引用,使用场景,修饰形参为只读const int a=10会分配内存如果使用引用,在前面加了一个const的话,那么就不可以修 ...
- JAVA 求数组中的最大值
package Code411;//求数组的最大值public class CodeArrayMax { public static void main(String[] args) { int ar ...
- 【python3 自动化之mysql操作】python3下的mysql入门基础
1.所需资源:pycharm,python3.6,module:pymysql 2.pycharm配置mysql: 新添加一个mysql数据库 ip:192.168.112.54 端口:3306 ...