案例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的报错

 四、总结提升

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

相关内容

热门资讯

玩家实测“乐乐互娱牛牛到底有挂... 您好:乐乐互娱牛牛这款游戏可以开挂,确实是有挂的,需要软件加微信【5951795】,很多玩家在乐乐互...
分享实测“阿拉游戏中心其实有透... 您好:阿拉游戏中心这款游戏可以开挂,确实是有挂的,需要软件加微信【6355786】,很多玩家在阿拉游...
分享实测“天天鄱阳麻将到底是不... 您好:天天鄱阳麻将这款游戏可以开挂,确实是有挂的,需要软件加微信【8700483】,很多玩家在天天鄱...
实测讲解“福州十八扑是不是有挂... 您好:福州十八扑这款游戏可以开挂,确实是有挂的,需要了解加客服微信【3636476】很多玩家在这款游...
玩家实测“永和备厅牛牛其实是有... 您好:永和备厅牛牛这款游戏可以开挂,确实是有挂的,需要软件加微信【6355786】,很多玩家在永和备...