返回介绍

快速入门

发布于 2024-08-18 11:12:34 字数 4065 浏览 0 评论 0 收藏 0

在本节中,我们将通过一个简单的示例来展现Spring Cloud Feign在服务客户端定义上所带来的便利。下面的示例将继续使用之前我们实现的hello-service服务,这里我们会通过Spring Cloud Feign提供的声明式服务绑定功能来实现对该服务接口的调用。

- 首先,创建一个Spring Boot基础工程,取名为feign-consumer,并在pom.xml中引入spring-cloud-starter-eureka和 spring-cloud-starter-feign依赖。具体内容如下所示:

<parent>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-parent</artifactId>

<version>1.3.7.RELEASE</version>

<relativePath/> <!--lookup parent from repository-->

</parent>

<dependencies>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-eureka</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-feign</artifactId>

</dependency>

</dependencies>

<dependencyManagement>

<dependencies>

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-dependencies</artifactId>

<version>Brixton.SR5</version>

<type>pom</type>

<scope>import</scope>

</dependency>

</dependencies>

</dependencyManagement>

- 创建应用主类ConsumerApplication,并通过@EnableFeignClients注解开启Spring Cloud Feign的支持功能。

@EnableFeignClients

@EnableDiscoveryClient

@SpringBootApplication

public class ConsumerApplication {

public static void main(String[]args){

SpringApplication.run(ConsumerApplication.class,args);

}

}

- 定义HelloService接口,通过@FeignClient注解指定服务名来绑定服务,然后再使用Spring MVC的注解来绑定具体该服务提供的REST接口。

@FeignClient("hello-service")

public interface HelloService {

@RequestMapping("/hello")

String hello();

}

注意:这里服务名不区分大小写,所以使用hello-service和HELLO-SERVICE都是可以的。另外,在 Brixton.SR5版本中,原有的 serviceId 属性已经被废弃,若要写属性名,可以使用name或value。

- 接着,创建一个 ConsumerController 来实现对 Feign 客户端的调用。使用@Autowired直接注入上面定义的HelloService实例,并在helloConsumer函数中调用这个绑定了 hello-service 服务接口的客户端来向该服务发起/hello接口的调用。

@RestController

public class ConsumerController {

@Autowired

HelloService helloService;

@RequestMapping(value="/feign-consumer",method=RequestMethod.GET)

public String helloConsumer(){

return helloService.hello();

}

}

- 最后,同Ribbon实现的服务消费者一样,需要在application.properties中指定服务注册中心,并定义自身的服务名为feign-consumer,为了方便本地调试与之前的Ribbon消费者区分,端口使用9001。

spring.application.name=feign-consumer

server.port=9001

eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/

测试验证

如之前验证 Ribbon 客户端负载均衡一样,我们先启动服务注册中心以及两个HELLO-SERVICE,然后启动 FEIGN-CONSUMER,此时我们在 Eureka 信息面板中可看到如下内容:

发送几次GET请求到http://localhost:9001/feign-consumer,可以得到如之前Ribbon实现时一样的效果,正确返回了“Hello World”。并且根据控制台的输出,我们可以看到Feign实现的消费者,依然是利用Ribbon维护了针对HELLO-SERVICE的服务列表信息,并且通过轮询实现了客户端负载均衡。而与Ribbon不同的是,通过Feign我们只需定义服务绑定接口,以声明式的方法,优雅而简单地实现了服务调用。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文