web框架nestjs如何实现microservice之间的动态路由?
发布于 6 年前 作者 tannineo 3133 次浏览 来自 问答

我遵循官方文档的教程实现了服务之间的调用.
transport使用的是NATS.
如果对于某个负载较大的服务我打算部署多个相同的实例, 但是所有实例使用的一套代码, 调用的特定方法cmd名称是相同的, 我如何指定某个特定的实例来处理这个调用?
小弟先谢谢各位大牛了.
使用的nest5.0版本.

6 回复

我想过服务的提供方可以读取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 了

回到顶部