如何解决微服务客户端注册到动态配置的 Nest.js 模块中,并通过参数加载到服务中
我在应用程序中使用了具有动态配置的 shared
模块。
共享模块包含 interceptor
和 service
,后者包含从共享参数配置的客户端。
我通过预定义的名称将 service
注入 interceptor
(将 SharedModule
动态导入 SecondAppModule
)。所以客户端名称可以有不同的值。在服务内部,我需要在客户端注入之前知道客户端名称。现在它是硬编码的:
@Injectable()
export class SumClientService {
constructor(@Inject('MATH_SERVICE') private client: ClientProxy) {
console.log('[SumClientService] - created')
}
sumCalculation(row: number[]): Observable<number> {
return this.client.send<number>({ cmd: 'sum' },row);
}
}
问题
我在 list 中检测到两种方法,可以将名称作为参数传递到服务中,而不会损坏由 nest.js
管理的 DI。但是我不知道如何通过指定名称访问模块上下文以加载服务(idea片段的代码如下)
@Injectable()
export class SumClientService {
constructor(@Inject('service_name') private name: string) {
console.log('[SumClientService] - created')
}
client: (clientName: string) => ClientProxy = (clientName: string): ClientProxy => // Todo load by clientName real client from `nest.js` context
// ...
}
附注
这个想法是在同一个应用程序中使用多个客户端。我第一次考虑了每个模块一个客户端的场景。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。