V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
overthemoon
V2EX  ›  问与答

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

  •  
  •   overthemoon · 97 天前 · 1286 次点击
    这是一个创建于 97 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    2. 不要 nacos ,使用 docker 提供的注册服务。
    feign 注解上的服务名需要改为 docker 内部的域名。
    mritd
        14
    mritd  
       96 天前 via iPhone
    第一,swarm 基本已经死了,不要用了,换 k8s ,折腾不动用 k3s 的发行版

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

    最后,尽量长痛不如短痛,要不后面就是💩上雕花
    datoujiejie221
        15
    datoujiejie221  
       96 天前 via iPhone
    @overthemoon nacos 不用容器化部署就可以了啊
    idblife
        16
    idblife  
       96 天前 via iPhone
    用 k8s 吧,nacos 里的服务注册服务发现可以不用
    sujin190
        17
    sujin190  
       96 天前
    @mritd #14 确实,而且用云的话,好像阿里、腾讯和华为云都有共享集群,便宜不少
    mritd
        18
    mritd  
       96 天前
    @sujin190 #17 没怎么用过云上的 k8s, 我们都是自己弄的, 然后用个云的 四层 LB 负载一下 api server 就行; 应用部分尽量都走 k8s api 服务发现或者干脆交给 k8s 处理(配置好 health check).
    sujin190
        19
    sujin190  
       96 天前
    @mritd #18 其实没多少差别,云无非就是直接支持存储用自己的云硬盘,service 和 ingress 可以直接用自己的负载均衡,什么监控日志告警啥的可以接入云基础服务,其他的没啥特别的,要说界面啥的真不咋好用,感觉还不如直接做集群管理 rancher 之类的好用呢
    xaplux
        20
    xaplux  
       96 天前
    feign 注解不是有个 url 参数么,指定一下域名就行
    @FeignClient(name = "xxx", url = "https://xxx.com", configuration = XxxxConfig.class)
    mritd
        21
    mritd  
       96 天前
    @sujin190 #19 云核心在 CPI, 具体更底层有没有啥优化就不清楚了; 理论上如果完全解耦合的话, 直接拿他们的 CPI 部署到自己集群也行, 但是如果有私货不开源那就没办法了.
    wm5d8b
        22
    wm5d8b  
       96 天前 via Android
    改容器挺好呀,DNS 就可以,nacos 都省了
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4857 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 40ms · UTC 02:11 · PVG 10:11 · LAX 18:11 · JFK 21:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.