我正在尝试用NestJS和gRPC构建微服务。它有两个服务,第一个是gRPC服务,第二个是调用gRPC服务的REST服务。
首先,它可以很好地处理一元调用,即findRepoById。但它不适用于服务器流式调用findAllRepos。当我试图调用findAllRepos时,它抛出如下错误
UnhandledPromiseRejection警告:错误:12 UNIMPLEMENTED:服务器没有实现findAllRepos方法
我写的文件如下所示
// main.proto
syntax = "proto3";
import "google/protobuf/timestamp.proto";
package main;
enum Visibility {
PUBLIC = 0;
PRIVATE = 1;
}
message Repository {
int32 id = 1;
string title = 2;
Visibility visibility = 3;
google.protobuf.Timestamp lastSeen = 4;
}
service MainService {
rpc findRepoById (RepoById) returns (Repository) {}
rpc findAllRepos (NoParam) returns (stream Repository) {}
}
message RepoById {
int32 id = 1;
}
message NoParam {}
// server.controller.ts
@Controller('repo')
export class RepoController {
constructor(
@Inject('RepoService') private readonly repoService: RepoService
) {}
@GrpcMethod('MainService', 'findRepoById')
findRepoById(request: RepoById, metadata: Metadata): Repository {
const targetId = request.id;
return this.repoService.findRepoById(targetId);
}
@GrpcStreamMethod('MainService', 'findAllRepos')
findAllRepos(request: NoParam, metadata: Metadata): Observable<Repository> {
const subject = new Subject<Repository>();
const repositories = this.repoService.findAllRepos();
repositories.map((repo) => {
subject.next(repo);
});
subject.complete();
return subject.asObservable();
}
}
// client.service.ts
export class RepoGrpcService implements OnModuleInit {
private mainService: MainServiceClient;
constructor(@Inject('main_package') private client: ClientGrpc) {}
onModuleInit() {
this.mainService = this.client.getService<MainServiceClient>('MainService');
}
findRepoById(id: number): Observable<Repository> {
return this.mainService.findRepoById({ id });
}
@GrpcStreamCall('MainService')
findAllRepos(): Observable<Repository[]> {
const results: Repository[] = [];
const repoStream = this.mainService.findAllRepos({});
repoStream.forEach((value) => console.log(value));
repoStream.subscribe({
next: (repo) => {
results.push(repo);
}
});
const subject = new Subject<Repository[]>();
subject.next(results);
subject.complete();
return subject.asObservable();
}
}
我想我已经遵循了NestJS gRPC文档中的所有代码,但不知怎么的,它仍然不起作用。我做错什么了吗?
根据我的经验,如果是服务器端流,@GrpcMethod注释可以工作。文档似乎没有足够清楚地描述这一点,但对我来说,似乎只有双向流服务需要GrpcStreamMethod?
我知道这个问题已经问了很久了,但这个答案可能会帮助其他人。请注意文档,由于前面章节的原因,代码的某些部分没有提及,因此NestJS也不例外。您的问题似乎来自控制器模块关系再次查看文档,确保您的控制器在正确的模块中定义,并且您的模块关系(导入)良好。
NestJs文档模块
官方示例
本文向大家介绍Python实现telnet服务器的方法,包括了Python实现telnet服务器的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python实现telnet服务器的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的Python程序设计有所帮助。
我按照这个指令创建了一个grpc服务器和客户端:https://docs . Microsoft . com/en-us/aspnet/core/tutorials/grpc/grpc-start?view=aspnetcore-3.0 当我尝试从客户端调用服务时,客户端会显示以下错误消息:“发生了一个或多个错误。(状态(StatusCode=Unknown,Detail=No Status re
本文向大家介绍SpringBoot服务上实现接口限流的方法,包括了SpringBoot服务上实现接口限流的方法的使用技巧和注意事项,需要的朋友参考一下 Sentinel是阿里巴巴开源的限流器熔断器,并且带有可视化操作界面。 在日常开发中,限流功能时常被使用,用于对某些接口进行限流熔断,譬如限制单位时间内接口访问次数;或者按照某种规则进行限流,如限制ip的单位时间访问次数等。 之前我们已经讲过接口限
在之前的几篇教程中,我们讲的是如何查询和Mutation操作,这些都是在客户端那边所进行的,那么服务器这边是如何处理这些请求的呢?这就是这篇教程所要说的东西了. 准备工作 克隆库: git clone https://github.com/zhouyuexie/learn-graphql 安装依赖: cd learn-graphql && npm install cd learn-graphql
我刚刚开始通过Spring Cloud了解微服务,首先我尝试从本文中重现基本示例https://spring.io/blog/2015/07/14/microservices-with-spring.这是我的代码: 尤里卡服务器 资源/registration-server.yml: 示例服务: 帐户-服务. yml: 你能打电话给我,请问我做错了什么吗? 编辑
问题内容: 我想用纯Java实现我自己的Web服务器,该Web服务器应仅支持静态资源(即html,js,css,图片,电影等)。 您能推荐有关如何实现这种事情的教程或文章吗?我应该使用几个进程或线程池,还是应该考虑像NodeJS这样的面向循环事件的对象? 我知道有一些免费的网络服务器可以完全满足我的需求,但我想以此为自己的锻炼。 问题答案: 我建议您熟悉HTTP请求格式http://datatra