当前位置: 首页 > news >正文

怎么制作网站视频盐城网站建设厂商

怎么制作网站视频,盐城网站建设厂商,学校网站 建设 价格,慈溪网站优化代码仓库地址:https://github.com/zeng-jc/rpc-grpc-practice 1.1 基本概念 gRPC 基于 Protocol Buffers(protobuf)作为接口定义语言(IDL),意味着你可以使用 protobuf 来定义你的服务接口,gRP…

代码仓库地址:https://github.com/zeng-jc/rpc-grpc-practice

1.1 基本概念

gRPC 基于 Protocol Buffers(protobuf)作为接口定义语言(IDL),意味着你可以使用 protobuf 来定义你的服务接口,gRPC生成的代码可以用于多种语言(C++, Java, Python, Go, C#, Ruby, Node.js),所以使用gRPC就能实现跨语言之间进行微服务通信。

gRPC 基于根据可远程调用的功能(方法)定义服务的概念。 对于每个方法,参数和返回类型需要在.proto文件中定义。

1.2 提供者中proto配置

首先创建创建一个grpc-provider的服务(启动服务说明:npm run start:dev grpc-provider

nest generate app grpc-provider

接着上一章我们需要继续安装grpc包

接着上一章我们需要继续安装grpc包

npm i --save @grpc/grpc-js @grpc/proto-loader

然后在main.ts中做出如下配置

import { NestFactory } from '@nestjs/core';
import { GrpcProviderModule } from './grpc-provider.module';
import { MicroserviceOptions, Transport } from '@nestjs/microservices';
import { join } from 'path';async function bootstrap() {const app = await NestFactory.createMicroservice<MicroserviceOptions>(GrpcProviderModule,{// 传输方式GRPCtransport: Transport.GRPC,options: {// proto包名package: 'hero',// proto包的地址protoPath: join(__dirname, 'proto/hero.proto'),// 你的服务地址url: '127.0.0.1:3001',},},);await app.listen();
}
bootstrap();

配置完成后此时你还不能立即启动项目,因为nest-cli中还没配置proto文件,所以nestjs并不会对proto文件进行编译。接下来是对nest-cli.json的配置

{"compilerOptions": {"assets": ["**/*.proto"],"watchAssets": true},
}

此时启动项目还是会报错的,因为我们还没有创建proto文件和内容的写入,如下是对proto文件的配置

// hero/hero.proto
syntax = "proto3"; //表示proto使用的语法package hero; //proto包名// 定义服务HeroesService
service HeroesService {// FindOne方法rpc FindOne (HeroById) returns (Hero) {}
}
// FindOne方法参数配置
message HeroById {int32 id = 1;
}
// FindOne方法返回值配置
message Hero {int32 id = 1;string name = 2;
}

1.3 grpc提供者服务实现

我们需要在src目录下先创建heroes资源,没有必要通过nest g res heroes快捷指令创建。创建heroes目录后再创建heroes.controller.tsheroes.module.ts即可,heroes.module.ts记得在grpc-provider.module.ts导入。

import { Controller } from '@nestjs/common';
import { GrpcMethod } from '@nestjs/microservices';
import { Metadata, ServerUnaryCall } from '@grpc/grpc-js';interface HeroById {id: number;
}
interface Hero {id: number;name: string;
}@Controller()
export class HeroesController {// 如下两个参数都是对应proto文件的内容,两个都可以省略,nestjs会自动转换名字大小写去匹配@GrpcMethod('HeroesService', 'FindOne')findOne(data: HeroById,metadata: Metadata,call: ServerUnaryCall<any, any>,): Hero {console.log('metadata', metadata);console.log('call', call);const items = [{ id: 1, name: 'John' },{ id: 2, name: 'Doe' },];return items.find(({ id }) => id === data.id);}
}

1.4 grpc客户端服务实现

说明:服务调用者可称为“服务消费者”或“服务客户端”

创建grpc服务客户端:nest generate app grpc-client

grpc-client.module.ts实现,注意在服务客户端也需要一份和提供者相同的proto文件,所以你需要把proto目录接拷贝到当前src目录下,我现在使用的是monorepo模式你也可以创建一个目录来存放所有proto文件。

import { Module } from '@nestjs/common';
import { GrpcClientController } from './grpc-client.controller';
import { GrpcClientService } from './grpc-client.service';
import { ClientsModule, Transport } from '@nestjs/microservices';
import { join } from 'path';
@Module({imports: [ClientsModule.register([{name: 'HERO_SERVICE', //自定义服务名字transport: Transport.GRPC,options: {url: '127.0.0.1:3001', //调用的gRPC服务地址package: 'hero',protoPath: join(__dirname, '/proto/hero.proto'),},},]),],controllers: [GrpcClientController],providers: [GrpcClientService],
})
export class GrpcClientModule {}

grpc-client.controller.ts实现,这里是练习我就直接将代码写入controller中了,实际开发建议写入service中。不知道你是否还记得在前面提供者中也是用到了接口类型HeroById和Hero,在monorepo模式下你也可以对类型进行集中管理,把代码抽出去

import { Controller, Get, Inject, OnModuleInit } from '@nestjs/common';
import { GrpcClientService } from './grpc-client.service';
import { ClientGrpc } from '@nestjs/microservices';
import { Metadata } from '@grpc/grpc-js';interface HeroById {id: number;
}
interface Hero {id: number;name: string;
}
interface HeroesService {findOne: (heroById: HeroById, metadata: Metadata) => Hero;
}@Controller()
export class GrpcClientController implements OnModuleInit {private heroesService: HeroesService;constructor(private readonly grpcClientService: GrpcClientService,@Inject('HERO_SERVICE') private client: ClientGrpc,) {}onModuleInit() {this.heroesService = this.client.getService<HeroesService>('HeroesService');}@Get()getHero(): Hero {// 第二个参数可以传递元数据const metadata = new Metadata();metadata.add('Set-Cookie', 'yummy_cookie=choco');return this.heroesService.findOne({ id: 1 }, metadata);}
}   
http://www.15wanjia.com/news/169433.html

相关文章:

  • 互联网行业属于什么行业优化网站最好的刷排名软件
  • 网站建好了怎么做才赚钱北京网站建设亿玛酷适合5
  • 网页建站系统网页源代码怎么看
  • 怎样做影视网站不侵权wordpress远程包含
  • 网站开发的技术简介是什么网站域名 邮箱
  • 如何在百度创建网站管理人员需要培训哪些课程
  • 学校网站建设学生文明上网高新区网站开发
  • 网站开发百度云wordpress最近浏览器
  • 网站后台添加炒域名 网站
  • 网站seo优化多少钱大良购物网站建设
  • 查询网站是哪家公司做的太极seo
  • 怎么做社交网站id wordpress
  • seo网站优化培训班石家庄网站开发建设
  • 我做动作你来猜的网站网站建设和软件开发
  • 手机网站建设电话咨询农产品网站建设需求
  • 综合电子商务型企业网站页游源码论坛
  • 自己如何建设外贸网站建站如何将自己做的网站传到网上
  • 网站开发 运行及维护怎么知道网站是php
  • 怎么把网站管理系统宣传方式有哪些
  • html5个人网站源码网站开发入门培训机构
  • 为什么网站上传都上传不成功临沂网站设计
  • 文化投资的微网站怎么做传媒公司网站建设方案
  • 商洛 网站建设网站开发任务分解
  • 南昌建站推广公司microsoft做网站
  • 怎么样才能搜索到自己做的网站上海有哪些外贸进出口公司
  • 做网站 合肥网页设计代码为什么没有颜色
  • 网站模板平台杭州网站建设哪家比较好
  • 如何建设一个稳定的网站如何建设公司网站信息
  • 网站建设人才有哪些进空间的网站吗
  • 中英文网站模板公司网站模板怎么写