NestJs如何配置GRPC客户端拦截器
NestJs how to configure GRPC client interceptors
我遇到一个问题,即在 2 个 NestJs 服务器之间通过 GRPC 进行通信时出现间歇性连接问题。我已经打开了一个关于 Whosebug 的先前问题,其中有人引导我进入一个线程,该线程似乎表明 @grpc-js
库存在问题。
修复的建议是将节点降级到 16.8.0
,虽然这对另一个用户有用,但对我不起作用。有人建议我创建一个 GRPC 拦截器,但是,我不知道如何在 NestJS 框架内执行此操作。
如何创建客户端拦截器?
这是我在 NestJS 中设置客户端连接的方式
const clientOptions: ClientsModuleOptions = [
{
name: 'HP_USERS_PACKAGE',
transport: Transport.GRPC,
options: {
url: `${env.USERS_SERVICE}:${config.users.port}`,
package: config.users.v1.package,
protoPath: config.users.v1.protoPath,
loader: {
includeDirs: [config.protoLoaderDir],
enums: String,
},
},
},
{
name: 'HP_STAGING_PACKAGE',
transport: Transport.GRPC,
options: {
url: `${env.STAGING_SERVICE}:${config.staging.port}`,
package: config.staging.v1.package,
protoPath: config.staging.v1.protoPath,
loader: {
includeDirs: [config.protoLoaderDir],
enums: String,
},
},
}]
关于我的断开连接问题的初始线程:
显示其他用户遇到相同问题的线程以及可能的解决方案
https://github.com/grpc/grpc-node/issues/1907#issuecomment-927361244
创建 GRPC 客户端拦截器的示例
https://github.com/grpc/proposal/blob/master/L5-node-client-interceptors.md#examples
您可以在客户端实例的选项中添加拦截器:
const clientOptions: ClientsModuleOptions = [{
name: 'HP_USERS_PACKAGE',
transport: Transport.GRPC,
options: {
interceptors: [retryInterceptor],
url: `${env.USERS_SERVICE}:${config.users.port}`,
package: config.users.v1.package,
protoPath: config.users.v1.protoPath,
loader: {
includeDirs: [config.protoLoaderDir],
enums: String,
},
},
}]`
重试拦截器的实现可以同这里:https://github.com/grpc/grpc-node/issues/284
我遇到一个问题,即在 2 个 NestJs 服务器之间通过 GRPC 进行通信时出现间歇性连接问题。我已经打开了一个关于 Whosebug 的先前问题,其中有人引导我进入一个线程,该线程似乎表明 @grpc-js
库存在问题。
修复的建议是将节点降级到 16.8.0
,虽然这对另一个用户有用,但对我不起作用。有人建议我创建一个 GRPC 拦截器,但是,我不知道如何在 NestJS 框架内执行此操作。
如何创建客户端拦截器?
这是我在 NestJS 中设置客户端连接的方式
const clientOptions: ClientsModuleOptions = [
{
name: 'HP_USERS_PACKAGE',
transport: Transport.GRPC,
options: {
url: `${env.USERS_SERVICE}:${config.users.port}`,
package: config.users.v1.package,
protoPath: config.users.v1.protoPath,
loader: {
includeDirs: [config.protoLoaderDir],
enums: String,
},
},
},
{
name: 'HP_STAGING_PACKAGE',
transport: Transport.GRPC,
options: {
url: `${env.STAGING_SERVICE}:${config.staging.port}`,
package: config.staging.v1.package,
protoPath: config.staging.v1.protoPath,
loader: {
includeDirs: [config.protoLoaderDir],
enums: String,
},
},
}]
关于我的断开连接问题的初始线程:
显示其他用户遇到相同问题的线程以及可能的解决方案 https://github.com/grpc/grpc-node/issues/1907#issuecomment-927361244 创建 GRPC 客户端拦截器的示例 https://github.com/grpc/proposal/blob/master/L5-node-client-interceptors.md#examples
您可以在客户端实例的选项中添加拦截器:
const clientOptions: ClientsModuleOptions = [{
name: 'HP_USERS_PACKAGE',
transport: Transport.GRPC,
options: {
interceptors: [retryInterceptor],
url: `${env.USERS_SERVICE}:${config.users.port}`,
package: config.users.v1.package,
protoPath: config.users.v1.protoPath,
loader: {
includeDirs: [config.protoLoaderDir],
enums: String,
},
},
}]`
重试拦截器的实现可以同这里:https://github.com/grpc/grpc-node/issues/284