• Feign服务调用


    Feign服务调用

    使用Feign,在服务消费者中,调用服务提供者的接口。

    注册中心

    此处使用 Nacos,详情见: https://www.cnblogs.com/expiator/p/17392549.html

    Feign依赖

        
            1.8
            UTF-8
            UTF-8
            2.6.13
            2021.0.5
            2021.0.5.0
        
        
            
                org.springframework.boot
                spring-boot-starter-web
            
            
                org.springframework.cloud
                spring-cloud-starter
            
            
                org.springframework.cloud
                spring-cloud-starter-bootstrap
            
            
                com.alibaba.cloud
                spring-cloud-starter-alibaba-nacos-config
                ${spring-cloud-alibaba.version}
            
            
                com.alibaba.cloud
                spring-cloud-starter-alibaba-nacos-discovery
                ${spring-cloud-alibaba.version}
            
    
            
                org.springframework.cloud
                spring-cloud-loadbalancer
            
    
            
                org.springframework.cloud
                spring-cloud-starter-openfeign
            
    
        
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45

    服务提供者

    • 服务提供者的配置文件 bootstrap.properties:
    #配置文件优先级(由高到低):
    #bootstrap.properties -> bootstrap.yml -> application.properties -> application.yml
    
    # Nacos帮助文档: https://nacos.io/zh-cn/docs/concepts.html
    server.port=8083
    spring.application.name=provider
    spring.profiles.active=dev
    # 设置配置中心服务端地址
    spring.cloud.nacos.config.server-addr=127.0.0.1:8848
    spring.cloud.nacos.config.prefix=provider
    spring.cloud.nacos.config.file-extension=yaml
    
    # Nacos 配置中心的namespace。需要注意,如果使用 public 的 namcespace ,请不要填写这个值,直接留空即可
    spring.cloud.nacos.discovery.namespace=
    # Nacos 服务发现与注册配置。
    # 其中子属性 server-addr 指定 Nacos 服务器主机和端口
    spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 服务提供者的控制层。
      其他文件详情见结尾的 GitHub。
    @RestController
    public class ProviderController {
    
        /**
         *  后面的 :abc 表示默认值为 abc。
         */
        @Value("${config.name:abc}")
        private String configName;
    
        @GetMapping(value = "/provider/test")
        public String test() {
            return "Hello World~";
        }
    
        @GetMapping(value = "/provider/config")
        public String getConfig() {
            return configName;
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    服务消费者

    • 服务消费者的配置文件 bootstrap.properties:
    #配置文件优先级(由高到低):
    #bootstrap.properties -> bootstrap.yml -> application.properties -> application.yml
    
    server.port=8084
    spring.application.name=consumer
    spring.profiles.active=dev
    spring.cloud.nacos.config.server-addr=127.0.0.1:8848
    spring.cloud.nacos.config.prefix=consumer
    spring.cloud.nacos.config.file-extension=yaml
    
    # Nacos 配置中心的namespace。需要注意,如果使用 public 的 namcespace ,请不要填写这个值,直接留空即可
    spring.cloud.nacos.discovery.namespace=
    spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • ConsumerApplication启动类:

    使用注解@EnableFeignClients启用feign客户端

    @SpringBootApplication
    @EnableDiscoveryClient
    @EnableFeignClients
    public class ConsumerApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(ConsumerApplication.class, args);
        }
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • ConsumerController 控制层:
    @RestController
    @RequestMapping("/consumer")
    public class ConsumerController {
    
        @Resource
        private FeignDemoService feignDemoService;
    
    
        @GetMapping("/test")
        public String customer() {
            return feignDemoService.test();
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • Feign接口:
    @FeignClient(value = "provider")
    public interface FeignDemoService {
    
        @GetMapping("/provider/test")
        String test();
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    接口测试

    启动服务提供者,以及服务消费者,通过 feign 做一次服务调用。

    Feign报错

    • Feign报错:
    A component required a bean of type '' that could not be found.
    
    • 1

    解决方法:

    在Application启动类上方,添加注解 @EnableFeignClients
    
    • 1
    • Feign报错:
    No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalancer?
    
    • 1

    解决方法:

            
                org.springframework.cloud
                spring-cloud-loadbalancer
            
    
    • 1
    • 2
    • 3
    • 4

    代码详情见:

    https://github.com/enjoyCoding666/iSpringCloud/

  • 相关阅读:
    鸿蒙OpenHarmony【搭建Ubuntu环境】
    每周只需几分钟轻松记录初始金额
    为什么改变进制传输系统码长不变
    Nacos Discovery--服务治理
    常用建模工具
    Vue2 常用用法
    抽象类的规则
    Postgresql-xl全局快照与GTM代码走读(支线)
    Outlook邮箱后缀如何修改?怎么添加后缀?
    一个开发者自述:我是如何设计针对冷热读写场景的 RocketMQ 存储系统
  • 原文地址:https://blog.csdn.net/sinat_32502451/article/details/134279048