我遵循官方文档的教程实现了服务之间的调用.
transport使用的是NATS.
如果对于某个负载较大的服务我打算部署多个相同的实例, 但是所有实例使用的一套代码, 调用的特定方法cmd名称是相同的, 我如何指定某个特定的实例来处理这个调用?
小弟先谢谢各位大牛了.
使用的nest
是5.0
版本.
我想过服务的提供方可以读取process.env
来给cmd
后面加上编号, 如果是教程里的sum
, 那么就类似sum-1
.
但是这样还是太蠢了…而且这意味着要在调用方一侧起一堆client
. 而且这些client
是静态的.
我使用的transport
是NATS, 如果是TCP的话, 还可以整合额外的服务发现像是consul
, 通过dns修改某个服务的url对应的ip??
仔细对了下自己的代码, client发起调用输入sum-1
也行… 也就是说使用一个配置文件来管理所有的 静态 实例应该是可行的.
但是要区别所有的cmd
. 感觉万一重名了就爆炸了, 集中在一个常量文件管理会好一些.
那么 随心所欲动态地添加服务 怎么办呢? 还是需要服务发现
?
@zuohuadong 大牛能摘抄下是哪段文字么? 我没看到有专门的篇幅讲解服务发现…
@zuohuadong 只要增加pattern的条件就可以筛选服务了? cmd只是示例 我其实在组织pattern的时候可以用这样的形式:
@MessagePattern({ cmd: 'sum', serverId: 'math-1' })
async sum(data: number[]) {
return (data || []).reduce((a, b) => a + b);
}
试了下的确可行, 但是动态的效果没达到, 还是需要自己手动维护一个服务器列表?
@tannineo 具体没细究,我们目前 是 用k8s + kong+nest.js 这样一个组合,服务发现是基于 k8s 了