• 微服务调用没有返回值,无法组成对象,但是会有feign的信息


    事件起因

    还是那个项目,至少对于我来说要学习的东西其实还是挺多的。

    需求

    员工信息管理,员工简历,导出功能,需要去联查员工的各项信息,其中,涉及到微服务的之间的操作出现了问题,目前主要的微服务是person服务,需要向basic-config服务请求具体的帮助,然后获取到null的结果,因为接手的是成型代码,所以不敢大规模的改动,目前情况是person服务没有收到basic-config服务的返回值,但是basic-config服务收到了person服务的请求与参数。
    在这里插入图片描述

    分析

    首先,因为这个是成型的代码,所以没有太大的问题,而且微服务之间的是相互通的,这是大前提。其次,项目年头挺长了,确实有两边相同实体但是不一致的情况,可能是因为历史问题有些内容没有成功提交,或者提交了但是不在我们目前掌握的项目之中,定下了其中的一个方向就是实体不一致的问题。

    问题处理

    首先,我们朝着实体的角度去考虑,确实两边实体有轻微不一致,包括有的地方是使用手写的getset有的是使用直接生成的lombok的Getter、Setter、ToString。
    而且两边实体极其麻烦,是由三层架构组成。在这里插入图片描述
    确实在比较上面花费了我很大的心思,就是一个实体,里面存在的包含的因素是一个list,然后这个list他也是包含了一个list,这一步我大概花费了不断地时间。
    在这里插入图片描述
    其实转机在这里,确实我是没有注意到,BasicConfigFeignService日志打印已经将BasicConfig服务的返回值打印出来了,还有个没有注意到的点就是,当我在postman访问的时候,person服务和basicconfig服务在person服务请求basicconfig服务的过程中同时响应了,
    在这里插入图片描述
    同一个请求,两边同时响应了,其实就是意味着其实,这一块被熔断了,当basicconfig服务在执行获取数据组织数据时,person已经熔断了,已经返回了null,等basicconfig执行完之后将数据传回person服务的时候其实已经结束了,所以在BasicConfigFeignService会打印出basicconfig的返回值。
    相应的验证其实我也应该意识到了,其实当实体比较没有生效的时候提出了两个解决办法。
    第一个还是对于实体的一个怀疑,将basicconfig服务中的实体全部迁移到person中,发现问题没有改变,最后放弃这个想法的做法将person服务接受返回值的参数从实体修改为String,发现String也是空的,就放弃这个想法。
    第二个想法是有没有可能是数据量过大,因为我们观察了BasicConfigFeignService日志返回的结果,发现数据量确实不小,大概是成百上千条,然后我这边不想大规模破坏对应的代码转而使用了在basicconfig服务执行完成之前的一步,去除多余数据,然后发现没有生效,要是我当时使用直接全部新建一套实体其实早就可以发现这个问题了。
    从postman调用的时候其实就已经很明显了,问题是出现在feign的熔断,原本feign 的配置是
    在这里插入图片描述
    修改为
    在这里插入图片描述
    取消熔断,并且加强超时间
    然后问题处理,就是因为执行时间过长,导致的。
    虽然整件事的最后以扣掉这个功能的前台按钮未结束,但是我确实学到了东西。

  • 相关阅读:
    实例解读丨关于GaussDB ETCD服务异常
    实验二-----数据库
    AP1236 线性稳压IC 耐压6.5V SOT23-5封装 电流500MA
    代码随想录算法训练营第五十七天| LeetCode 392 判断子序列、LeetCode 115 不同的子序列
    [入门一]C# webApi创建、与发布、部署、api调用
    C++语言GDAL批量裁剪多波段栅格图像:基于像元个数裁剪
    如何使用记事本制作一个简陋的小网页(2)——表格的建立
    GO语言-select语句
    SpringSecurity启动流程源码深入刨析
    百叶帘系统内置于玻璃内,分为手动和电动两种控制方式
  • 原文地址:https://blog.csdn.net/weixin_44077141/article/details/133361588