案例03-fegin调用报404问题

目录

一、背景介绍

二、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问题的出现。
案例03-fegin调用报404问题_第1张图片

二、Fegin调用

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

案例03-fegin调用报404问题_第2张图片

Invoker模块

1.引入的依赖

Invoker

    
        8
        8
        1.8
        0.2.10
        
        Greenwich.SR2
        
        2.1.0.RELEASE
    

    
        
            
            
                org.springframework.cloud
                spring-cloud-dependencies
                ${spring-cloud.version}
                pom
                import
            
            
            
            
                com.alibaba.cloud
                spring-cloud-alibaba-dependencies
                ${spring.cloud.alibaba.version}
                pom
                import
            
            
        
    

    
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
        
            org.apache.commons
            commons-lang3
        
        
        
            org.projectlombok
            lombok
            1.18.10
            provided
        
        
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-discovery
        
        
        
            org.springframework.boot
            spring-boot-starter-actuator
        
        
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-config
        

        
        
            org.springframework.cloud
            spring-cloud-starter-openfeign
        
    

2.bootstrap.yml文件

案例03-fegin调用报404问题_第3张图片

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 {


    @Resource
    private UserFeign userFegin;

    @PostMapping("feign")
    public String getDeviceListByPage() {
        return userFegin.findAll();
    }
    
}

Provider模块

1.引入的依赖

    provider
    
        8
        8
        
        Greenwich.SR2
        
        2.1.0.RELEASE
    

    
        
            
            
                org.springframework.cloud
                spring-cloud-dependencies
                ${spring-cloud.version}
                pom
                import
            
            
            
            
                com.alibaba.cloud
                spring-cloud-alibaba-dependencies
                ${spring.cloud.alibaba.version}
                pom
                import
            
            
        
    


    
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
        
            com.baomidou
            mybatis-plus-boot-starter
            3.3.0
        
        
        
            mysql
            mysql-connector-java
            8.0.11
        
        
        
            org.projectlombok
            lombok
            1.18.10
            provided
        

        
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-discovery
        
        
        
            org.springframework.boot
            spring-boot-starter-actuator
        
        
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-config
        

        
            com.alibaba.boot
            nacos-config-spring-boot-starter
            0.2.1
        
        
            com.alibaba.boot
            nacos-discovery-spring-boot-starter
            0.2.1
        
    

2.bootstrap.yml文件

案例03-fegin调用报404问题_第4张图片

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 "服务调用成功";
    }
}

运行程序

案例03-fegin调用报404问题_第5张图片

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

案例03-fegin调用报404问题_第6张图片

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

三、问题复现

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

案例03-fegin调用报404问题_第7张图片

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

案例03-fegin调用报404问题_第8张图片

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

案例03-fegin调用报404问题_第9张图片

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

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

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

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

案例03-fegin调用报404问题_第10张图片

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

案例03-fegin调用报404问题_第11张图片

 四、总结提升

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

你可能感兴趣的:(项目实战,微服务,架构,云原生)