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
        

    


服务提供者

  • 服务提供者的配置文件 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

  • 服务提供者的控制层。
    其他文件详情见结尾的 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;
    }
}

服务消费者

  • 服务消费者的配置文件 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

  • ConsumerApplication启动类:

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

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class ConsumerApplication {

    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class, args);
    }

}

  • ConsumerController 控制层:
@RestController
@RequestMapping("/consumer")
public class ConsumerController {

    @Resource
    private FeignDemoService feignDemoService;


    @GetMapping("/test")
    public String customer() {
        return feignDemoService.test();
    }

}
  • Feign接口:
@FeignClient(value = "provider")
public interface FeignDemoService {

    @GetMapping("/provider/test")
    String test();

}

接口测试

启动服务提供者,以及服务消费者,通过 feign 做一次服务调用。
Feign服务调用_第1张图片

Feign报错

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

解决方法:

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

解决方法:

        
            org.springframework.cloud
            spring-cloud-loadbalancer
        

代码详情见:

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

你可能感兴趣的:(feign,后端,java)