• 金灶沐
    2022-01-10
    服务提供方提取一层接口出来, 由服务提供方维护请求路径, 服务消费方,直接声明一个接口extends消费方的接口, 加上@FeignClients即可

    作者回复: Bingo!同学在extends的时候加上@FeignClients的方式很好,规避了bean override的问题

    共 4 条评论
    24
  • so long
    2022-01-10
    每个服务提供方单独添加一个openfeign的模块,服务调用方添加对应的openfeign模块即可

    作者回复: bingo,我也推荐这种做法

    共 2 条评论
    13
  • so long
    2022-01-10
    老师,我用spring cloud alibaba搭建了公司的一个项目,服务启动后,接口的首次请求需要2-3秒钟,后续请求都在100ms左右,请问有哪些优化措施可以提高首次接口请求速度?之前使用ribbon可是设置为饿汉式加载,但是spring cloud loadbalancer好像没有饿汉式加载的配置。

    作者回复: 讲真loadbalancer的功能相比ribbon是差一截的,奈何spring cloud不愿意带ribbon玩了,也没辙。ribbon规避懒加载的原因是RibbonClient在调用期才进行初始化,不过ribbon在这个过程花费的时间并不多,只会在网络环境不好的情况下超时概率有所增加。对于loadbalancer来说,实际场景下大多数公司的做法是设置connection timeout + retry的方式来解决。如果对于一致性要求高的接口,底层要注意实现幂等性以防多次调用

    
    8
  • ᯤ⁵ᴳ
    2022-01-11
    请求异常,多次重试等使用Webclient会比较方便,@FeignClient 如何处理呢

    作者回复: feign自带的重试策略比较初级,可以结合openfeign+resilience4j的方式做复杂重试规则,https://resilience4j.readme.io/docs/retry

    
    6
  • Geek_e93c48
    2022-01-10
    关于老师的思考题: 做成将提供方的OpenFeign做成中间件抽离出来。 个人建议:老师是否可以在后边的文章中不仅仅讲技术落地,加入一些使用该技术在生产上的遇到的问题和排查思路,这些才是我们需要的(手动滑稽)

    作者回复: 同学这个建议很好,专栏整体偏入门,没有加入太多线上案例分析,后面会分享一些线上的使用场景

    
    5
  • Mars
    2022-02-07
    老师,能问下微服务下调用其他服务,其他服务是其他厂商的web接口,只提供过输入输出和请求地址这种,注册中心也不在一个,这种常规的http请求在微服务架构下的最佳调用实践是咋样的呢?还是继续open feign做url吗?

    作者回复: 如果是外部对接,其实用feign就没啥好处了,因为feign的服务发现负载均衡都用不上,外部对接直接用最土的resttemplate或者webclient就可以。我们不用考虑它背后的负载均衡,咱调用的应该是对方给提暴露出来的一个vip url,负载均衡都在对向端管理

    共 3 条评论
    4
  • 欢沁
    2022-02-25
    老师你好,微服务的数据库分库后,如果A服务要展示的数据需要和B数据库的表关联,微服务划分后,数据库层面就没法做join操作,企业现在通用的方式是怎么处理的。我目前的解决方法是通过feign来调用其他服务获取数据,再插到A服务的对象中,如果遇到关联的表多,就需要feign调用多次,我不认为这是一个好的解决方法,这样的话代码量会堆积非常多,如果没有划分数据库的话,只要通过join就解决问题了。 所以概括就是,我需要关联到其他服务的数据库的表,没法join,我应该怎么做,谢谢老师。

    作者回复: 其实在三高应用中同一个微服务库我们也不推荐使用join这类操作,如果是实时性要求不高的场景,把各个微服务表里的数据做一层数据异构,异构到非结构化数据库里,比如opensearch, ES里面,然后再做查找。 如果是实时性要求很高的数据必须查DB,三高服务我推荐你把join逻辑放到代码层来实现,给到DB的尽可能都走主键索引计划。如果非要用join,一定确保调出sql执行计划确保每一步都走索引并且复杂度尽可能低

    
    3
  • 梁中华
    2022-02-09
    要加自定义的header头怎么办?

    作者回复: 方法有很多,RequestMapping里有注解属性可以支持header,也可以使用Headers注解,还可以在Feign的拦截器里加header

    
    3
  • Geek_a5c816
    2022-03-18
    这种原始openFegin的实现消费者调用提供者的时候,无法传递headers中的参数,怎么处理呢?

    作者回复: 就像rpc接口调用,其实微服务之间的request大多不需要把业务参数放到header里,但openfeign依然提供了一种定制header的方式,在后面的章节里我们会结合Sentinel了解到

    
    2
  • 寥若晨星
    2022-03-11
    为啥不可以直接在服务实现的接口上加@FeignClient注解呢

    作者回复: FeignClient注解的目的是为了不写实现,通过接口完成远程调用,所以底层的动态代理注册流程里有一个Assert断言,限定了是从接口读取 Assert.isTrue(annotationMetadata.isInterface(), "@FeignClient can only be specified on an interface");

    
    1