Feign服务调用

Feign服务调用

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

注册中心

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

Feign依赖

    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.6.13</spring-boot.version>
        <spring-cloud.version>2021.0.5</spring-cloud.version>
        <spring-cloud-alibaba.version>2021.0.5.0</spring-cloud-alibaba.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>${spring-cloud-alibaba.version}</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>${spring-cloud-alibaba.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-loadbalancer</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

    </dependencies>


服务提供者

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

  • 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?

解决方法:

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-loadbalancer</artifactId>
        </dependency>

代码详情见:

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

posted on   乐之者v  阅读(57)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
历史上的今天:
2018-05-16 Intellij IDEA 启动项目ClassNotFoundException
2018-05-16 mysql常用语句及关键字
< 2025年3月 >
23 24 25 26 27 28 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 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示