- 推荐序一
- 推荐序二
- 推荐序三
- 推荐语
- 前言
- 第1章 基础知识
- 第2章 微服务构建:Spring Boot
- 第3章 服务治理:Spring Cloud Eureka
- 第4章 客户端负载均衡:Spring Cloud Ribbon
- 第5章 服务容错保护:Spring Cloud Hystrix
- 第6章 声明式服务调用:Spring Cloud Feign
- 第7章 API网关服务:Spring Cloud Zuul
- 第8章 分布式配置中心:Spring Cloud Config
- 第9章 消息总线:Spring Cloud Bus
- 第10章 消息驱动的微服务:Spring Cloud Stream
- 附录 A Starter POMs
- 后记
快速入门
在本节中,我们将通过一个简单的示例来展现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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论