docker 容器化部署与 feign 服务调用问题

2022-08-24 09:00:59 +08:00
 overthemoon

原来项目使用 feign 进行服务调用的,现在用原来的代码给甲方公司进行二次开发,甲方需要通过 docker-swarm 进行容器化部署和服务治理。
现在问题是,甲方需要我们服务之间调用需要通过 resttemplate ,就是传一个域名,通过 docker 进行 dns 解析然后进行服务调用。
原来项目里面充斥着大量的 feign 调用的业务代码,如果通过 resttemplate 调用需要手动拼接各种东西。
请问,有没有一种办法,既兼容甲方的 docker 容器化部署方式,又兼容 feign 的负载均衡的调用方式呢?

1740 次点击
所在节点    问与答
22 条回复
datoujiejie221
2022-08-24 09:12:24 +08:00
再部个 nacos
overthemoon
2022-08-24 09:22:31 +08:00
@datoujiejie221 nacos 容器化需要怎么操作
gitdoit
2022-08-24 09:23:11 +08:00
魔改一下 feign 呢
sujin190
2022-08-24 09:29:43 +08:00
feign 不还是 http 调用,本来就是走域名的,所以这两者哪不同了?哪来的兼容性问题。。
ql562482472
2022-08-24 10:46:21 +08:00
Feign 原本就是走 HTTP 调用,用 Feign 和 RestTemplate 完全没有区别,你口中的不支持,是你没搞清楚链路
overthemoon
2022-08-24 10:48:45 +08:00
@ql562482472 我们架构师说容器化部署后,naocs 地址会变,不能用 nacos ,是这样吗
ql562482472
2022-08-24 10:52:24 +08:00
@overthemoon 使用 swarm 可以不用 nacos 了 aService 就是 a 容器的地址,不需要注册中心了 整体移除都可以。容器时代注册中心功能可以托管给其他组件了
overthemoon
2022-08-24 10:55:00 +08:00
@ql562482472 那用 swarm 之后如何进行服务注册和服务发现呢,是否可以继续使用 feign 调用
ql562482472
2022-08-24 11:02:35 +08:00
@overthemoon 不需要服务注册,服务发现,而是由容器平台的 DNS 来管理,服务只要启动,就有固有的地址,服务的健康状态由容器平台来管理。
feign 调用当然是可以的,地址用配置写死就可以了
overthemoon
2022-08-24 11:08:32 +08:00
@ql562482472 那我通过 feign 用域名调用,直接就行了嘛
zr8657
2022-08-24 11:17:54 +08:00
@overthemoon 直接写域名调就行了,每个服务都跟甲方定个域名让他们配下
Seulgi
2022-08-24 11:24:32 +08:00
直接改 feign 注解就行了,feign 是支持直接请求域名的,你们甲方应该是用 docker 的 ingress ,实际对外就是容器名或者 svc 之类的域名:端口,你服务直接请求会被 docker 拦住解析到对应的容器,改动不大。
leesam1024
2022-08-24 11:55:58 +08:00
1. 保留 nacos 。
在容器里面新部署 nacos ,然后会有对应 nacos 服务的 docker 域名,
在原有项目上把 nacos 的服务地址改为 docker 域名即可。
feign 注解还是保留原来服务名即可

2. 不要 nacos ,使用 docker 提供的注册服务。
feign 注解上的服务名需要改为 docker 内部的域名。
mritd
2022-08-24 12:18:51 +08:00
第一,swarm 基本已经死了,不要用了,换 k8s ,折腾不动用 k3s 的发行版

第二,容器化以后尽量删除掉无状态应用自己的服务发现,除非该服务发现地层调用 k8s api ,强行上也行,但是会冲突。比如外部容器调度认定不健康,内部应用服务发现认定健康。

最后,尽量长痛不如短痛,要不后面就是💩上雕花
datoujiejie221
2022-08-24 13:03:53 +08:00
@overthemoon nacos 不用容器化部署就可以了啊
idblife
2022-08-24 13:20:45 +08:00
用 k8s 吧,nacos 里的服务注册服务发现可以不用
sujin190
2022-08-24 13:38:37 +08:00
@mritd #14 确实,而且用云的话,好像阿里、腾讯和华为云都有共享集群,便宜不少
mritd
2022-08-24 13:46:15 +08:00
@sujin190 #17 没怎么用过云上的 k8s, 我们都是自己弄的, 然后用个云的 四层 LB 负载一下 api server 就行; 应用部分尽量都走 k8s api 服务发现或者干脆交给 k8s 处理(配置好 health check).
sujin190
2022-08-24 14:56:59 +08:00
@mritd #18 其实没多少差别,云无非就是直接支持存储用自己的云硬盘,service 和 ingress 可以直接用自己的负载均衡,什么监控日志告警啥的可以接入云基础服务,其他的没啥特别的,要说界面啥的真不咋好用,感觉还不如直接做集群管理 rancher 之类的好用呢
xaplux
2022-08-24 15:02:13 +08:00
feign 注解不是有个 url 参数么,指定一下域名就行
@FeignClient(name = "xxx", url = "https://xxx.com", configuration = XxxxConfig.class)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/874958

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX