文档

工作示例

安装:

$ 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 微服务的更多相关文章

  1. NodeJS 基于 Dapr 构建云原生微服务应用,从 0 到 1 快速上手指南

    Dapr 是一个可移植的.事件驱动的运行时,它使任何开发人员能够轻松构建出弹性的.无状态和有状态的应用程序,并可运行在云平台或边缘计算中,它同时也支持多种编程语言和开发框架.Dapr 确保开发人员专注 ...

  2. 高大上的微服务可以很简单,使用node写微服务

    安装 npm install m-service --save 使用 编写服务处理函数 // dir1/file1.js // 使用传入的console参数输出可以自动在日志里带上request id ...

  3. 微服务与Docker介绍

    什么是微服务 微服务应用的一个最大的优点是,它们往往比传统的应用程序更有效地利用计算资源.这是因为它们通过扩展组件来处理功能瓶颈问题.这样一来,开发人员只需要为额外的组件部署计算资源,而不需要部署一个 ...

  4. 我所理解的SOA和微服务

    本文原创,原文地址为:http://www.cnblogs.com/fengzheng/p/5847441.html SOA和微服务到底是什么关系? 说实话,我确实不明白SOA和微服务到底有什么本质上 ...

  5. CI Weekly #5 | 微服务架构下的持续部署与交付

    CI Weekly 围绕『 软件工程效率提升』 进行一系列技术内容分享,包括国内外持续集成.持续交付,持续部署.自动化测试. DevOps 等实践教程.工具与资源,以及一些工程师文化相关的程序员 Ti ...

  6. 微服务和SOA服务

    微服务和SOA都被认为是基于服务的架构,这意味着这两种架构模式都非常强调将“服务”作为其架构中的首要组件,用于实现各种功能(包括业务层面和非业务层面).微服务和SOA是两种差异很大的架构模式,但是他们 ...

  7. 【DDD/CQRS/微服务架构案例】在Ubuntu 14.04.4 LTS中运行WeText项目的服务端

    在<WeText项目:一个基于.NET实现的DDD.CQRS与微服务架构的演示案例>文章中,我介绍了自己用Visual Studio 2015(C# 6.0 with .NET Frame ...

  8. WeText项目:一个基于.NET实现的DDD、CQRS与微服务架构的演示案例

    最近出于工作需要,了解了一下微服务架构(Microservice Architecture,MSA).我经过两周业余时间的努力,凭着自己对微服务架构的理解,从无到有,基于.NET打造了一个演示微服务架 ...

  9. 微服务(Microservices)—Martin Fowler【翻译】

    本文转载自:http://www.cnblogs.com/liuning8023/p/4493156.html -------------------------------------------- ...

随机推荐

  1. 页面加载过渡页 loading plugin css

    是前文 plugin 示例 loading 中需要用到的样式.现在样式扩充为 5类.loadtwo 使用到了bgimg /*loading animation loading one*/ /* loa ...

  2. [物理学与PDEs]第1章第9节 Darwin 模型 9.3 Darwin 模型

    1. $\Omega$ 中 ${\bf A}={\bf A}_T+{\bf A}_L$, 其中 $\Div{\bf A}_T=0$, $\rot{\bf A}_L={\bf 0}$. 若 $$\bex ...

  3. a标签跳页传参,以及截取URL参数

    <a href="dd.index?aa=1&&bb=2"></a> //截取URL参数 // console.log(window.loc ...

  4. Jumpserver(堡垒机)的安装与应用

    官网:http://docs.jumpserver.org/zh/docs/introduce.html 作者:邓聪聪 环境 系统: CentOS 7.6 IP: 172.16.16.2 关闭 sel ...

  5. Codeforces 877E - Danil and a Part-time Job 线段树+dfs序

    给一个有根树,1e5个节点,每个节点有权值0/.1,1e5操作:1.将一个点的子树上所有点权值取反2.查询一个点的子树的权值和   题解: 先深搜整颗树,用dfs序建立每个点对应的区间,等于把树拍扁成 ...

  6. Gradle part1 HelloWorld

    (https://spring.io/guides/gs/gradle/#scratch) ----gradle helloworld----- 1.下载后安装 Unzip the file to y ...

  7. 帆软报表(finereport) 动态报表

    动态表实现了不同的人根据需要选择不同的表进行查看,从而提高查询效率 在定义数据集时,通过if函数来判断参数的值从而来实现调用不同的数据表 如直接将SQL语句定义成:SELECT * FROM ${if ...

  8. 学习笔记: 异常状态管理,托管堆垃圾回收,CLR寄宿

    1. 2. string 在内存中是连续分配的,是一个数组,  数组的特点就是 查询块,增删慢,改动Array导致所有数组成员地址变动,成本高 而string又是在程序中经常变动的 ,所有 clr中对 ...

  9. James Munkres Topology: Theorem 20.4

    Theorem 20.4 The uniform topology on \(\mathbb{R}^J\) is finer than the product topology and coarser ...

  10. 一起学Python——数据类型详解

    和学习其他编程语言一样,首先要了解一门语言的数据类型. Python的数据类型有整型.浮点型.字符串.布尔型.日期时间类型.list列表.set集合.tuple元组.dict词典等. 1.整型 就是数 ...