原来项目使用 feign 进行服务调用的,现在用原来的代码给甲方公司进行二次开发,甲方需要通过 docker-swarm 进行容器化部署和服务治理。
现在问题是,甲方需要我们服务之间调用需要通过 resttemplate ,就是传一个域名,通过 docker 进行 dns 解析然后进行服务调用。
原来项目里面充斥着大量的 feign 调用的业务代码,如果通过 resttemplate 调用需要手动拼接各种东西。
请问,有没有一种办法,既兼容甲方的 docker 容器化部署方式,又兼容 feign 的负载均衡的调用方式呢?
1
datoujiejie221 2022-08-24 09:12:24 +08:00 via iPhone
再部个 nacos
|
2
overthemoon OP @datoujiejie221 nacos 容器化需要怎么操作
|
3
gitdoit 2022-08-24 09:23:11 +08:00
魔改一下 feign 呢
|
4
sujin190 2022-08-24 09:29:43 +08:00
feign 不还是 http 调用,本来就是走域名的,所以这两者哪不同了?哪来的兼容性问题。。
|
5
ql562482472 2022-08-24 10:46:21 +08:00
Feign 原本就是走 HTTP 调用,用 Feign 和 RestTemplate 完全没有区别,你口中的不支持,是你没搞清楚链路
|
6
overthemoon OP @ql562482472 我们架构师说容器化部署后,naocs 地址会变,不能用 nacos ,是这样吗
|
7
ql562482472 2022-08-24 10:52:24 +08:00
@overthemoon 使用 swarm 可以不用 nacos 了 aService 就是 a 容器的地址,不需要注册中心了 整体移除都可以。容器时代注册中心功能可以托管给其他组件了
|
8
overthemoon OP @ql562482472 那用 swarm 之后如何进行服务注册和服务发现呢,是否可以继续使用 feign 调用
|
9
ql562482472 2022-08-24 11:02:35 +08:00
@overthemoon 不需要服务注册,服务发现,而是由容器平台的 DNS 来管理,服务只要启动,就有固有的地址,服务的健康状态由容器平台来管理。
feign 调用当然是可以的,地址用配置写死就可以了 |
10
overthemoon OP @ql562482472 那我通过 feign 用域名调用,直接就行了嘛
|
11
zr8657 2022-08-24 11:17:54 +08:00
@overthemoon 直接写域名调就行了,每个服务都跟甲方定个域名让他们配下
|
12
Seulgi 2022-08-24 11:24:32 +08:00
直接改 feign 注解就行了,feign 是支持直接请求域名的,你们甲方应该是用 docker 的 ingress ,实际对外就是容器名或者 svc 之类的域名:端口,你服务直接请求会被 docker 拦住解析到对应的容器,改动不大。
|
13
leesam1024 2022-08-24 11:55:58 +08:00
1. 保留 nacos 。
在容器里面新部署 nacos ,然后会有对应 nacos 服务的 docker 域名, 在原有项目上把 nacos 的服务地址改为 docker 域名即可。 feign 注解还是保留原来服务名即可 2. 不要 nacos ,使用 docker 提供的注册服务。 feign 注解上的服务名需要改为 docker 内部的域名。 |
14
mritd 2022-08-24 12:18:51 +08:00 via iPhone
第一,swarm 基本已经死了,不要用了,换 k8s ,折腾不动用 k3s 的发行版
第二,容器化以后尽量删除掉无状态应用自己的服务发现,除非该服务发现地层调用 k8s api ,强行上也行,但是会冲突。比如外部容器调度认定不健康,内部应用服务发现认定健康。 最后,尽量长痛不如短痛,要不后面就是💩上雕花 |
15
datoujiejie221 2022-08-24 13:03:53 +08:00 via iPhone
@overthemoon nacos 不用容器化部署就可以了啊
|
16
idblife 2022-08-24 13:20:45 +08:00 via iPhone
用 k8s 吧,nacos 里的服务注册服务发现可以不用
|
18
mritd 2022-08-24 13:46:15 +08:00
@sujin190 #17 没怎么用过云上的 k8s, 我们都是自己弄的, 然后用个云的 四层 LB 负载一下 api server 就行; 应用部分尽量都走 k8s api 服务发现或者干脆交给 k8s 处理(配置好 health check).
|
19
sujin190 2022-08-24 14:56:59 +08:00
@mritd #18 其实没多少差别,云无非就是直接支持存储用自己的云硬盘,service 和 ingress 可以直接用自己的负载均衡,什么监控日志告警啥的可以接入云基础服务,其他的没啥特别的,要说界面啥的真不咋好用,感觉还不如直接做集群管理 rancher 之类的好用呢
|
20
xaplux 2022-08-24 15:02:13 +08:00
feign 注解不是有个 url 参数么,指定一下域名就行
@FeignClient(name = "xxx", url = "https://xxx.com", configuration = XxxxConfig.class) |
21
mritd 2022-08-24 15:02:44 +08:00
@sujin190 #19 云核心在 CPI, 具体更底层有没有啥优化就不清楚了; 理论上如果完全解耦合的话, 直接拿他们的 CPI 部署到自己集群也行, 但是如果有私货不开源那就没办法了.
|
22
wm5d8b 2022-08-25 08:48:19 +08:00 via Android
改容器挺好呀,DNS 就可以,nacos 都省了
|