案例03-fegin调用报404问题
创始人
2025-05-29 12:27:25

目录

一、背景介绍

二、Fegin调用

Invoker模块

1.引入的依赖

2.bootstrap.yml文件

3.启动类

4.Feign接口

5.UserController类

Provider模块

1.引入的依赖

2.bootstrap.yml文件

3.启动类

4.UserController类

运行程序

三、问题复现

1.准备两个程序,分别为test-feign-2 和 test-feign-5。在代码上完全一致,服务的端口号不一致。

2. 将四个服务都注册到nacos上

3.nacos进行负载均衡配置,根据权重进行分发

4.修改 服务端口为9009的代码注释掉

5.调用服务,验证报错情况


一、背景介绍

        在项目当中我们经常使用Nacos来管理配置文件。Nacos从中起到了两个作用一个是注册中心,一个是配置中心。配置中心将配置从应用中抽离出来,交给nacos统一的来管理配置,可以配置多套环境,发生改变各个微服务各自到nacos配置中心拉取相关配置,实现配置中心化避免频繁修改配置文件;作为注册中心实现服务调用者对服务提供者远程调用,项目中出现了两台使用同一个命名空间的nacos只更新了一台,导致请求到了没更新的那一台导致了404问题的出现。

二、Fegin调用

准备一个Spring Cloud项目,包含一个消费者,一个服务提供者,使用nacos作为服务发现和配置中心

Invoker模块

1.引入的依赖

Invoker881.80.2.10Greenwich.SR22.1.0.RELEASEorg.springframework.cloudspring-cloud-dependencies${spring-cloud.version}pomimportcom.alibaba.cloudspring-cloud-alibaba-dependencies${spring.cloud.alibaba.version}pomimportorg.springframework.bootspring-boot-starter-weborg.apache.commonscommons-lang3org.projectlomboklombok1.18.10providedcom.alibaba.cloudspring-cloud-starter-alibaba-nacos-discoveryorg.springframework.bootspring-boot-starter-actuatorcom.alibaba.cloudspring-cloud-starter-alibaba-nacos-configorg.springframework.cloudspring-cloud-starter-openfeign

2.bootstrap.yml文件

3.启动类

@SpringBootApplication
@EnableDiscoveryClient
//扫描标有@FeignClient的接口
@EnableFeignClients("com.ctsi.sddx.feign")
public class NacosApplication {public static void main(String[] args) {SpringApplication.run(NacosApplication.class, args);}
}

4.Feign接口

@FeignClient(value = "arpro-provider-one")//value为Feign调用的服务名,也是注册到nacos中的服务名
public interface UserFeign {@GetMapping("user/get")String findAll();
}

5.UserController类

@RestController
@RequestMapping("/user")
public class UserController {@Resourceprivate UserFeign userFegin;@PostMapping("feign")public String getDeviceListByPage() {return userFegin.findAll();}}

Provider模块

1.引入的依赖

    provider88Greenwich.SR22.1.0.RELEASEorg.springframework.cloudspring-cloud-dependencies${spring-cloud.version}pomimportcom.alibaba.cloudspring-cloud-alibaba-dependencies${spring.cloud.alibaba.version}pomimportorg.springframework.bootspring-boot-starter-webcom.baomidoumybatis-plus-boot-starter3.3.0mysqlmysql-connector-java8.0.11org.projectlomboklombok1.18.10providedcom.alibaba.cloudspring-cloud-starter-alibaba-nacos-discoveryorg.springframework.bootspring-boot-starter-actuatorcom.alibaba.cloudspring-cloud-starter-alibaba-nacos-configcom.alibaba.bootnacos-config-spring-boot-starter0.2.1com.alibaba.bootnacos-discovery-spring-boot-starter0.2.1

2.bootstrap.yml文件

3.启动类

@EnableDiscoveryClient
@SpringBootApplication
public class TestFeignApplication {public static void main(String[] args) {SpringApplication.run(TestFeignApplication.class, args);}
}

4.UserController类

@RestController
@RequestMapping("/user")
public class UserController {@GetMapping("/get")public String findAll() {return "服务调用成功";}
}

运行程序

 启动两个服务,在nacos上可以看到两个服务都已经注册上去了。

 通过Invoker服务的UserFeign接口就可以调用到Provider服务的findAll方法了。

三、问题复现

1.准备两个程序,分别为test-feign-2 和 test-feign-5。在代码上完全一致,服务的端口号不一致。

2. 将四个服务都注册到nacos上

 3.nacos进行负载均衡配置,根据权重进行分发

4.修改 服务端口为9009的代码注释掉

@RestController
@RequestMapping("/user")
public class UserController {
//    @GetMapping("/get")
//    public String findAll() {
//        return "服务调用成功";
//    }
}

5.调用服务,验证报错情况

第一次调用,走的是没有注释代码的服务

 第二次调用,走的是注释代码的服务,产生了404的报错

 四、总结提升

        部署了两套代码一定要确保内容的一致性。如果不一致通过负载均衡就会造成两次情况的结果不一样,甚至报错的情况。做事情要有闭环反馈。减少因为疏忽而产生的一些问题和隐患。

相关内容

热门资讯

实测教材“ 微信十三道在哪里下... 亲.微信十三道这款游戏是可以开挂的,确实是有挂的,通过添加客服【3045033】很多玩家在这款游戏中...
重大.通报“微乐河南推倒胡要开... 重大.通报“微乐河南推倒胡要开挂用什么软件”[分享装挂详细步骤]【无需打开直接搜索微信【538228...
实测分享“新金龙透视挂辅助安装... 您好:新金龙这款游戏可以开挂,确实是有挂的,需要软件加微信【69174242】,很多玩家在新金龙这款...
今日重大通报,微乐福建麻将真的... 您好:微乐福建麻将这款游戏可以开挂,确实是有挂的,需要软件加微信【2606488】,很多玩家在欢聚斗...
重大.通报“麻友圈2有没有挂吗... 您好:麻友圈2这款游戏可以开挂,确实是有挂的,需要软件加微信【6219938】,很多玩家在麻友圈2这...