Spring Cloud 入门 之 Feign(三)

Spring Cloud 入门 之 Feign(三)

绿林寻猫
2021-12-08 / 0 评论 / 222 阅读 / 正在检测是否收录...

一、前言

在上一篇文章Spring Cloud 入门 之 Ribbon (二) 中介绍了 Ribbon 使用负载均衡调用微服务,但存在一个问题:消费端每个请求方法中都需要拼接请求服务的 URL 地址,存在硬编码问题且不符合面向对象编程思想。如果服务名称发生变化,消费端也需要跟着修改。

本篇文章将介绍 Feign 来解决上边的问题。

二、简单介绍

Feign 是一个声明式的 Web Service 客户端。使用 Feign 能让编写 Web Service 客户端更加简单,同时支持与Eureka、Ribbon 组合使用以支持负载均衡。

Spring Cloud 对 Feign 进行了封装,使其支持了 Spring MVC 标准注解和 HttpMessageConverters。

Feign 的使用方法是定义一个接口,然后在其上边添加 @FeignClient 注解

三、实战演练

本次测试案例基于之前发表的文章中介绍的案例进行演示,不清楚的读者请先转移至 Spring Cloud 入门 之 Ribbon (二)  进行浏览。

3.1添加依赖

在user-consumer和user-provider都添加(注意版本冲突)

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

3.2 定义新接口

在 user-consumer 项目中新建一个接口

@FeignClient(value = "user-api")
public interface UserClient {
    @RequestMapping(value = "/provider/user/get/{id}")
    User get(@PathVariable("id") Integer id);
}

使用 @FeignClient 注解指定调用的微服务名称,封装了调用 USER-API 的过程,作为消费方调用模板。

注意:Feign 接口的定义最好与对外开发的 controller 中的方法定义一致,此处的定义与 user-provider 项目中 controller 类定义的方法一致。

在 user-consumer 项目中直接使用UserClient调用

@Service
public class UserServiceImpl implements IUserService {

    @Autowired
    private UserClient userClient;
    @Override
    public User get(User user) {

        return userClient.get(user.getId());
    }
}

3.3 启动 Feign 功能

在启动类上添加 @EnableEeignClients 注解:

@EnableFeignClients(basePackages = {"com.test"})
@EnableEurekaClient
@SpringBootApplication
public class OrderServerApplication {

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

依次启动 eureka-server 、 user-provider、 user-provider-8082 、 user-provider-8083 、user-consumer

 

 

 

 

 

0

评论 (0)

取消