两个程序中, 提供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. Tript协议|伯尔尼公约|著作权|立法宗旨|自动保护|著作权集体管理|

    知识产权 国际条约: Tript协议是国际性公约,<与贸易有关的知识产权协定>(英文:Agreement on Trade-Related Aspects of Intellectual ...

  2. Java面试题4-附答案

    BIO.NIO和AIO的区别   Java BIO : 同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程 ...

  3. python语法基础-基础-赋值与深浅拷贝

    ##################################### 预备知识一——python的变量及其存储 在详细的了解python中赋值.copy和deepcopy之前,我们还是要花一点时 ...

  4. deeplearning.ai 构建机器学习项目 Week 1 机器学习策略 I

    这门课是讲一些分析机器学习问题的方法,如何更快速高效的优化机器学习系统,以及NG自己的工程经验和教训. 1. 正交化(Othogonalization) 设计机器学习系统时需要面对一个问题是:可以尝试 ...

  5. getHibernateTemplate()的find用法大全

    一.find(String queryString); 示例:this.getHibernateTemplate().find("from bean.User"); 返回所有Use ...

  6. Redis Client 官方下载地址

    下载地址:https://github.com/caoxinyu/RedisClient 界面 归途(LM)

  7. Docker 安装 CentOS

    Docker 安装 CentOS CentOS(Community Enterprise Operating System)是 Linux 发行版之一,它是来自于 Red Hat Enterprise ...

  8. when|nobody|hazard|lane|circuit|

    How can I help them  they won't listen to me? 题目解析 考查从句.此句意为:如果他们要是不听我的话,我怎么帮助他们?此处,when引导的状语从句表示假设事 ...

  9. 关于后端下载后端返回的blob类型文件的下载

    关于后端返回blob类型的文件下载记录,在请求的时候前端设置响应类型 responseType: 'blob', const blob = new Blob([r], {type: r.type}); ...

  10. 精心收集的Hadoop学习资料

    1.<Hadoop技术内幕:深入解析Hadoop Common和HDFS>下载地址:http://download.csdn.net/detail/w397090770/6643259. ...