服务在生产环境做了负载,部署了两台。用了同一个nacos的命名空间。上线的时候只对其中的一台做了更新,导致请求到另一台的时候产生了404的问题

想要复现上文所述问题,就要先了解什么是fegin调用,如何使用fegin调用。
fegin是一个声明式的http客户端,使用fegin只需要创建一个接口并使用对应注解,就能支持我们服务之间的调用。

这里我们将服务一作为调用方,服务二作为被调用方。(往往我们的项目中,一个服务可能即是调用方,又是被调用方。)
被调用方不需要额外增加任何操作,只要有对应的接口就可以了。下图为我的服务二controller提供对外的接口

3.1引入openFegin的依赖
org.springframework.cloud spring-cloud-starter-openfeign
3.2创建fegin调用的接口

3.3启动类上添加@EnableFeignClients注解

3.4需要的地方进行注入,然后进行使用


根据结果我们可以看出。调用的serverOne的服务,serverone里通过fegin调用了serverTwo的接口。
故事背景里提到。同样的服务部署了两份,更新的时候只更新了其中的一份。我们在本地进行一下模拟
我们把上文提到的serviceTwo服务部署两份,由于是在我自己本机上操作,我们使用端口号进行一下区分。

这样我们就模拟出了,serverTwo服务,部署了两份。我们可以看一下nacos,现在serverTwo项目有两个实例。这两个服务的默认权重都是1,也就是如果我再次使用 serverOne对serverTwo进行fegin调用,会走一次9002端口,然后会走一次9004端口。

我们将9004端口对应的服务内容进行一下更改,将serviceTwo/test 接口注释。模拟一下,两个服务不同,即是上文提到的一个服务更新了,另一个服务没有更新,调用到未更新的就会产生404问题


第二次调用的时候,由于9004对应的serverTwo服务的接口被注销调了,无法调通。这样就复现了上文所出现的问题
一个服务更新了,另一个服务没有更新,调用到未更新的就会产生404问题
那么我们如何才能避免这种问题呢?我暂时想到的是
将一个服务都配置到一个jenkins里,一次构建,多个服务同时都更新。
通过上线流程约束
做事一定要求全局观,不能丢掉任何一部分