iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 14
0
Modern Web

Nest.js framework 30天初探系列 第 14

Nestjs framework 30天初探:Day14 MicroServices

  • 分享至 

  • xImage
  •  

MicroServices

https://ithelp.ithome.com.tw/upload/images/20171217/20107195KRYv2g2kEI.png

這邊的MicroServices的意思是透過transport layer(傳輸層)的協議(TCP)起一個應用程式提供服務。Nestjs原生支持兩種方式,TCP、Redis pub/sub,不過透過實作 CustomTransportStrategy介面,就可以簡單導入新的transport strategy。

  1. 來實作一下,先下cmd指令。
git clone https://github.com/nestjs/typescript-starter.git project
cd project
npm install
  1. 改寫一下server.ts,程式碼如下。
    src/server.ts
import { NestFactory } from '@nestjs/core';
import { ApplicationModule } from './modules/app.module';
import { Transport } from '@nestjs/microservices';
import { INestMicroservice } from '@nestjs/common/interfaces';

async function bootstrap() {
	const app = await NestFactory.create(ApplicationModule);
	app.connectMicroservice({
	  transport: Transport.TCP,
	});
  
	await app.startAllMicroservicesAsync();
	await app
	.listen(3001).then(()=>{
		console.log('MicroService is starting.');
	})
	.catch((error)=>{
		console.error('Something wrong happened,',error);
	})
  }
  bootstrap();

connectMicroservice 會將MicroService連結到NestApplication介面,並將Application轉換成混合型介面。另外,connectMicroservice()方法可以傳入四個參數,https://ithelp.ithome.com.tw/upload/images/20171218/20107195waQy6ZBCJ7.png

  1. 實際啟動server。
    cmd指令
npm start

https://ithelp.ithome.com.tw/upload/images/20171217/20107195d7n8MnT4Ti.png
4. 改寫AppController,程式碼如下。
src/modules/app.controller.ts

import { Controller, Get } from '@nestjs/common';
import { MessagePattern, Transport, Client, ClientProxy } from '@nestjs/microservices';
import { Observable } from 'rxjs/Observable';

@Controller()
export class AppController {
  @Client({ transport: Transport.TCP})
  client: ClientProxy;
  
  //策略模式,自定義一個策略名稱sayHi
  @MessagePattern({ cmd: 'sayHi' })
  //傳入data
  sayHi(data: string): Observable<string> {
    return Observable.of("Hi,I'm MicroService.");
  }

  @Get()
  call(): Observable<string> {
    //呼叫使用一個策略,選定sayHi
    const pattern = { cmd: 'sayHi' };
    //由於send()要傳入兩個參數,pattern 和 data,data這邊給定空字串。
    const data = '';
    return this.client.send<string>(pattern, data);
  }
}
  1. 對http://localhost:3001 做Get 請求。
    結果如下。
    https://ithelp.ithome.com.tw/upload/images/20171217/20107195WUuPNQL7Hr.png

MicroService成功。

程式碼都在github


上一篇
Nestjs framework 30天初探:Day13 WebSocket-Socket.IO聊天室(part2)
下一篇
Nestjs framework 30天初探:Day15 MicroServices_RabbitMQ
系列文
Nest.js framework 30天初探30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言