文档

工作示例

安装:

$ 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. [物理学与PDEs]第2章习题10 一维理想流体力学方程组的 Lagrange 形式

    试证明: 一维理想流体力学方程组的 Lagrange 形式 (5. 22)-(5. 24) 也可写成如下形式 $$\beex \bea \cfrac{\p \tau}{\p t}-\cfrac{\p ...

  2. [译]Ocelot - Delegating Handlers

    原文 可以为HttpClient添加delegating handlers. Usage 为了添加delegating handler需要做两件事. 首先如下一样创建一个类. public class ...

  3. 【linux】基础知识

    为什么学习Linux? 服务器大多数都是linux操作系统,学习[上线][运维]是我们前端开发工程师的必备技能.Linux系统和maxOS系统十分类似,所以推荐大家使用max电脑工作. Linux的版 ...

  4. hibernate之Configuration对象

    任务:读取主配置信息 1.  Configuration config = new Configuration();      使用hibernate,但并没有读取 2.  config.config ...

  5. LeetCode第十四题-字符串数组中最长的共同前缀

    Longest Common Prefix 问题简介: 编写一个函数来查找字符串数组中最长的公共前缀字符串,如果没有公共前缀,则返回空字符串"" 举例: 1: 输入: [“xwq” ...

  6. Django之AJAX

    一.预备知识JSON python中的json: json.dumps( )      json.loads( ) JavaScript中的json:JSON.stringify( )       J ...

  7. 【转】【Linux】Swap与Memory

    背景介绍 Memory指机器物理内存,读写速度低于CPU一个量级,但是高于磁盘不止一个量级.所以,程序和数据如果在内存的话,会有非常快的读写速度.但是,内存的造价是要高于磁盘的,且内存的断电丢失数据也 ...

  8. ROS-PCL点云库的安装

    网上各种说安装点云库还慢,中间出现一些没有依赖库的情况,但在我这里都是很顺利,难道是一开始安装了ROS的原因?不是很清楚,暂且将过程写下来. 一,下载PCL $ git clone https://g ...

  9. 【原创】大叔经验分享(9)yarn重要配置yarn.nodemanager.local-dirs

    yarn中有一个比较重要的配置yarn.nodemanager.local-dirs,如果配置的不好,在饱和状态运行下集群会出现很多问题:1 默认配置${hadoop.tmp.dir}/nm-loca ...

  10. 在 VsCode 中自定义代码补全

    前言 之前公司的 Vscode 折腾成功过,如今给自己家装一个忘记怎么定义了,故回忆一下写个博文记录 代码补全顾名思义就是输入一两个字母自动提示相关的联想操作,由于VsCode非常精简所以很多联想没有 ...