两个程序中, 提供grpc服务的称为服务端, 调用grpc服务的为客户端, 以下是grpc服务端和客户端的代码编写
 

 
1. 创建两个nestjs项目demo1(端口: 3000)和demo2(端口: 3001), demo1一个提供grpc服务,demo2调用demo1中的方法
 
  如何创建nest项目和启动这里就不赘述了, nest官网有
 
2. 下载依赖包
npm i --save @nestjs/microservices
npm i --save grpc @grpc/proto-loader
3. 服务端demo1中代码
 
     3.1 创建cats.proto文件,此文件demo1与demo2都需要编写这个文件, 内容一致, 名字随便, 但必须是.proto文件
syntax = "proto3";

package first; // 包名

service CatsService {
rpc FindOne (ById) returns (Cat) {} // 暴露方法
} // message定义结构
message ById { // 参数
int32 id = ;
} message Cat { // 返回类型
int32 id = ;
string name = ;
}
       以上cats.proto文件中, 定义了路径/first.CatsService/FindOne
        .proto文件:  Protobuf即Protocol Buffers,是Google公司开发的一种跨语言和平台的序列化数据结构的方式,是一个灵活的、高效的用于序列化数据的协议。
 
     3.2 创建文件 grpc.option.ts, 引用.proto文件
import { Transport, ClientOptions } from '@nestjs/microservices';
import { join } from 'path';
export const grpcServerOptions: ClientOptions = {
  transport: Transport.GRPC,
  options: {
    url: 'localhost:8888', // grpc连接ip与端口
    package: 'first', // 包名 与.proto中保持一致
    protoPath: join(__dirname, '../cats.proto') // 找到cats.proto
  },
};
 
     3.3 main.ts中开启grpc服务
 // 开启grpc 作为grpc服务
app.connectMicroservice(grpcServerOptions);// grpcServerOptions为3.2中的配置
app.startAllMicroservicesAsync()
     3.4 在相应的controller中暴露方法

import { Controller, Get, Param } from '@nestjs/common';
import { AppService } from './app.service';
import { GrpcMethod } from '@nestjs/microservices' @Controller()
export class AppController {
constructor(private readonly appService: AppService) {} // @GrpcMethod('CatsService', 'FindOne')
// GrpcMethod中第一个是.proto中服务, 第二个参数是暴露方法名, 不写的话默认是方法的首字母大写
@GrpcMethod('CatsService', 'FindOne')
findOne (data: {id: number}, metdata: any) {
const items = [
{ id: , name: 'John' },
{ id: , name: 'Doe' },
];
return items.find(
({ id }) => id === data.id
);
} @Get()
getHello(): string {
return this.appService.getHello();
} }

公开了方法:

localhost:8888/first.CatsService/FindOne


 
 
4. 客户端demo2中的代码编辑, 目的是使用demo1中的cats的findOne方法
     4.1 创建cats.proto文件, 与demo1中的文件一致
     4.2 创建文件grpc.client.server.ts
import { Injectable } from "@nestjs/common";
import { ClientGrpc, Client } from "@nestjs/microservices"; import { Transport, ClientOptions } from '@nestjs/microservices';
import { join } from 'path';
// 与服务端的options中配置一致
export const grpcClientOptions: ClientOptions = {
transport: Transport.GRPC,
options: {
    url: 'localhost:8888', // grpc连接ip与端口
    package: 'first', // 包名 与.proto中保持一致
    protoPath: join(__dirname, '../cats.proto') // 找到cats.proto
  },
};

@Injectable()
export class ClentServe {
   // 客户端 实例 使用@Client()装饰器
@Client(grpcClientOptions) public readonly client: ClientGrpc;
}
     4.3 使用

import { Controller, Get, Post, Body, Inject, OnModuleInit } from '@nestjs/common';
import { ApiOperation } from '@nestjs/swagger';
import { CreateCatsDto } from './dto/cat.dto';
import { GrpcMethod } from '@nestjs/microservices';
import { ClentServe } from 'src/grpc-client/client.serve';
import { CatsService } from 'src/grpc-client/interface/api.interface'; @Controller('cats')
export class CatsController implements OnModuleInit {
private catService
constructor(@Inject(ClentServe) private readonly clentServe: ClentServe) {} onModuleInit() {
  // 可以在程序中创建接口CatsService, 这样调用方法时方便,有提示, 没有也可以
  // this.catService = this.clentServe.client.getService<CatsService>('CatsService')
this.catService = this.clentServe.client.getService('CatsService')
} @Get()
index() {
return this.catService.findOne({id: })
} @Post()
createPosts (@Body() dto: CreateCatsDto) {
return dto
} }
启动demo1与demo2, 这样demo2就可以调用到demo1的方法了
 
 
 

使用nestjs集成grpc具体操作的更多相关文章

  1. Spring Boot 集成 GRPC

    代码地址如下:http://www.demodashi.com/demo/14110.html 一.背景 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring ...

  2. Spring Boot WebFlux 集成 Mongodb 数据源操作

    WebFlux 整合 Mongodb 前言 上一讲用 Map 数据结构内存式存储了数据.这样数据就不会持久化,本文我们用 MongoDB 来实现 WebFlux 对数据源的操作. 什么是 MongoD ...

  3. springmvc集成aop记录操作日志

    首先说明一下,这篇文章只做了记录日志相关事宜 具体springmvc如何集成配置aop对cotroller进行拦截,请看作者的另一篇文章 http://www.cnblogs.com/guokai87 ...

  4. 7、redis之使用spring集成commons-pool来操作常见数据类型

    环境的搭建参见:http://www.cnblogs.com/yangzhilong/p/4729857.html 下面直接贴具体的测试代码: package com.yzl; import java ...

  5. springboot集成grpc

    gRPC 简介 gRPC 是一个现代开源的高性能 RPC 框架,可以在任何环境下运行.它可以有效地将数据中心内和跨数据中心的服务与可插拔支持进行负载均衡.跟踪.健康检查和认证.它也适用于分布式计算,将 ...

  6. Abp + gRpc 如何实现用户会话状态传递

    0.背景 在实际项目当中,我们采用的是 Abp 框架,但是 Abp 框架官方并没有针对 Grpc 进行模块封装.基于此我结合 Abp 与 MagicOnion 封装了一个 Abp.Grpc 模块,它包 ...

  7. 烂泥:KVM、kickstart与FTP集成

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 在上一篇文章中,我们介绍了有关KVM.kickstart与NFS集成的相关内容.在这节我们将继续介绍FTP与KVM.kickstart集成的相关操作. ...

  8. Zabbix 集成 OneAlert 实现全方位告警

    1. 前言 告警将重要信息发送给运维「或者其他相关人」,及时发现并且处理问题.在所有开源监控软件里面,Zabbix 的告警方式无疑是最棒的.告警的方式各式各样,从 Email 告警到飞信.139/18 ...

  9. ASP.NET Core 3.0 上的gRPC服务模板初体验(多图)

    早就听说ASP.NET Core 3.0中引入了gRPC的服务模板,正好趁着家里电脑刚做了新系统,然后装了VS2019的功夫来体验一把.同时记录体验的过程.如果你也想按照本文的步骤体验的话,那你得先安 ...

随机推荐

  1. Elasticsearch Rest模式和RPC模式性能比较

    Elasticsearch 有两种链接模式,即Rest方式(对应端口9200)和RPC方式(对应端口9300)这两种访问效率到底差多少,在同样的业务逻辑下,测试了一波. 用的JMeter进行压力测试 ...

  2. 让java不再难懂

    废话不都说,直接上图哈 java基础思维导图整理.png 1.Java 简介.png 2.java主要特性.png 3.java发展历史.png 4.java 开发环境配置.png 5.java 基础 ...

  3. shell、cmd、dos和脚本语言

    问题一:Shell是什么? 操作系统可以分成核心(kernel)和Shell(外壳)两部分,其中,Shell是操作系统与外部的主要接口,位于操作系统的外层,为用户提供与操作系统核心沟通的途径.Shel ...

  4. python后端面试第五部分:Linux操作系统--长期维护

    ##################     Linux操作系统      ####################### 1,讲一下你常用的Linux/git命令和作用: 2,查看当前进程是用什么命 ...

  5. vuex-cart 介绍

    使用vue2 + vuex + vue-cli + localStorage + less,实现本地储存的购物车. 安装 1 git clone https: 1 cd sls-vuex 1 npm ...

  6. 吴裕雄--天生自然python学习笔记:python爬虫与网页分析

    我们所抓取的网页源代码一般都是 HTML 格式的文件,只要研究明白 HTML 中 的标签( Tag )结构,就很容易进行解析并取得所需数据 . HTML 网页结构 HTML 网 页是由许多标签( Ta ...

  7. HTML name、id、class 的区别

    转载: 在一个页面中,有许多的控件(元素或标签).为了更方便的操作这些标签,就需要给这些标签标识一个身份牌. 目录 1. name :指定标签的名称. 2. id :指定标签的唯一标识. 3. cla ...

  8. java的自增和自减

    class Untitled { public static void main(String[] args) { int a = 3; int b = a++; //a先赋值给b,然后a再自己加1 ...

  9. 使用java列举所有给定数组中和为定值的组合

    import java.util.Arrays; public class SolveProb { ]; ;// 记录当前 public SolveProb() { } public static v ...

  10. 【转载】python3安装scrapy之windows32位爬坑

    python3安装scrapy之windows32位爬坑 原创 2016年11月06日 01:38:08 标签: scrapy / windows / python / 开源框架 / 网络爬虫   早 ...