创建公共的Feign api项目

存在问题 和 背景

在微服务框架中, 假如有个User service provide 了若干接口查询用户数据。

而其他若干微服务, 例如 order sevice, bill service, payment service 都要访问user service
我们则会在这3 个微服务都编写对应FeignClient for User service。

request
request
request
order service - UserClient
User Service - User Contrller
bill service - UserClient
payment service - UserClient

这会必然造成大量的代码重复, 所以有事我们有必要让写User service controller的开发,顺便把User Client 也写好, 包括对应的 Entity Class, 默认配置 放在1个新项目中。

然后其他微服务只需要引入这个library

request
request
request
provide_lib
provide_lib
provide_lib
order service
User Service - User Contrller
bill service
payment service
feing-api-project
User Client
User Entity Class
Default config
...

那我们新建1个branch 开发编代码

创建1个新的module

在这里插入图片描述
如果发现这个module project 创建后并没有在IDEA被maven管理,则要通过Add support model 菜单加入Maven support

修改feign module 项目pom.xml , 引入 open-feign 依赖

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

添加 User entity 类, UserClient 接口, config 配置类(主要for日志)

在这里插入图片描述

在order-service 项目的pom.xml 引入 feign-api module 依赖

<!-- import feign api model -->
        <dependency>
            <groupId>com.home.feign</groupId>
            <artifactId>user-feign-api</artifactId>
            <version>1.0</version>
        </dependency>

修改orderservice springboot 启动类

修改 FeignClientConfiguration 默认配置的依赖

由于UserClient 不在Order service 项目所以不会被spring 容器扫描出来这个bean并实例化

所以我们必须在@EnableFeignClients 加上 clients={UserClient.class}

import com.home.feign.config.FeignClientConfiguration;


@SpringBootApplication
@EnableFeignClients(defaultConfiguration = FeignClientConfiguration.class, clients={UserClient.class})
@Import(SpringConfiguration.class)
public class OrderApplication {
    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }
}

修改Orderservice 中 entity 类 Order 和 service 类 Orderservice

对Entity类 User 的依赖 我们可以直接用feign-api project的

import com.home.feign.entity.User;

接下来可以启动测试了

亲测, 这么做后, 所有日志level配置失效 待解决

### Feign 常见面试问题及答案 #### 1. Feign 是什么? Feign 是一种声明式的 Web Service 客户端,它使得编写 HTTP API 的客户端变得更加简单。开发者只需创建一个接口并用注解来配置即可[^2]。 #### 2. Feign 如何实现请求拦截功能? Feign 支持请求拦截器的功能,可以通过实现 `RequestInterceptor` 接口,在发送请求前添加自定义逻辑。例如可以用来设置公共的请求头或者对请求参数进行加密等操作。具体实现方式如下所示: ```java @Configuration public class FeignConfig { @Bean public RequestInterceptor headerInterceptor() { return template -> { template.header("Key", "Value"); // 添加自定义头部 // 可以在此处加入其他自定义逻辑 }; } } ``` 上述代码展示了如何通过 Feign 配置类注入一个拦截器 Bean 来完成请求拦截的任务。 #### 3. Spring Cloud 中断路器的作用是什么? Spring Cloud 断路器的主要作用是在分布式系统中保护服务调用方免受级联失败的影响。当某个远程服务不可用或响应缓慢时,断路器能够快速返回错误而不是长时间等待,从而提高系统的稳定性和可用性[^1]。 虽然此问题是关于 Spring Cloud 断路器的内容,但在实际开发过程中,如果使用了 Hystrix 或 Resilience4j 等工具作为断路器组件,则可能也会集成到 Feign 请求链路当中去共同发挥作用。 #### 4. 在微服务架构下,Feign 和 RestTemplate 的区别有哪些? 两者都是用于发起 HTTP 调用的技术方案,但它们之间存在一些显著差异: - **编程模型**:RestTemplate 属于命令式风格;而 Feign 则采用的是声明式设计模式。 - **易用程度**:相比手动构建 URL 并拼接参数等方式来说,基于接口定义的服务调用形式更加直观简洁明了。 - **性能表现**:由于内部实现了连接池管理机制等原因,默认情况下 Feign 性能优于 RestTemplate。 #### 5. Provider/Consumer 是否共享某些特定类型的全局设定项? 是的,在实际项目部署期间为了便于维护以及保持一致性原则通常会将诸如服务超时时间、重试策略等相关属性集中存储起来供生产者消费者双方共同访问利用[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nvd11

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值