SpringCloud系列之声明式服务调用Netflix Feign

一时失言乱红尘 2021-09-02 03:11 521阅读 0赞

在上一章的学习中,我们知道了微服务的基本概念,知道怎么基于Ribbon+restTemplate的方式实现服务调用,接着上篇博客,我们学习怎么基于Feign实现服务调用,请先学习上篇博客,然后再学习本篇博客

Feign是一个声明式的web service客户端,它使得编写web service客户端更为容易。创建接口,为接口添加注解,即可使用Feign。Feign可以使用Feign注解或者JAX-RS注解,还支持热插拔的编码器和解码器。

环境准备:

  • JDK 1.8
  • SpringBoot2.2.3
  • SpringCloud(Hoxton.SR6)
  • Maven 3.2+
  • 开发工具

    • IntelliJ IDEA
    • smartGit

创建一个SpringBoot Initialize项目,详情可以参考我之前博客:SpringBoot系列之快速创建项目教程
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. port: 8083
  2. spring:
  3. application:
  4. name: feign-service-consumer
  5. eureka:
  6. client:
  7. service-url:
  8. defaultZone: http://localhost:8761/eureka/
  9. healthcheck:
  10. enabled: false
  11. instance:
  12. status-page-url-path: http://localhost:8761/actuator/info
  13. health-check-url-path: http://localhost:8761/actuator//health
  14. prefer-ip-address: true
  15. instance-id: feign-service-consumer8083

@FeignClient指定服务名称,@RequestMapping指定要调用的接口

  1. package com.example.springcloud.client.service;
  2. import com.example.springcloud.client.bean.User;
  3. import org.springframework.cloud.openfeign.FeignClient;
  4. import org.springframework.stereotype.Service;
  5. import org.springframework.web.bind.annotation.PathVariable;
  6. import org.springframework.web.bind.annotation.RequestMapping;
  7. import org.springframework.web.bind.annotation.RequestMethod;
  8. /** * <pre> * UserService * </pre> * * <pre> * @author mazq * 修改记录 * 修改后版本: 修改人: 修改日期: 2020/07/28 13:09 修改内容: * </pre> */
  9. @FeignClient(value = "EUREKA-SERVICE-PROVIDER")
  10. @Service
  11. public interface UserService {
  12. @RequestMapping(value = "/api/users/{username}",method = RequestMethod.GET)
  13. User findGithubUser(@PathVariable("username")String username);
  14. }

加上@EnableEurekaClient@EnableFeignClients,写个接口进行测试

  1. package com.example.springcloud.client;
  2. import com.example.springcloud.client.bean.User;
  3. import com.example.springcloud.client.service.UserService;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.boot.SpringApplication;
  6. import org.springframework.boot.autoconfigure.SpringBootApplication;
  7. import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
  8. import org.springframework.cloud.openfeign.EnableFeignClients;
  9. import org.springframework.scheduling.annotation.Async;
  10. import org.springframework.web.bind.annotation.GetMapping;
  11. import org.springframework.web.bind.annotation.PathVariable;
  12. import org.springframework.web.bind.annotation.RestController;
  13. @SpringBootApplication
  14. @EnableEurekaClient
  15. @EnableFeignClients
  16. @RestController
  17. public class SpringcloudFeignClientApplication {
  18. @Autowired
  19. UserService userService;
  20. public static void main(String[] args) {
  21. SpringApplication.run(SpringcloudFeignClientApplication.class, args);
  22. }
  23. @GetMapping("/findUser/{username}")
  24. public User index(@PathVariable("username")String username){
  25. return userService.findGithubUser(username);
  26. }
  27. }

要运行eureka服务端,eureka服务提供者,代码请参考上一章博客

补充:IDEA中多实例运行方法

step1:如图,不要加上勾选
在这里插入图片描述

step2:指定不同的server端口和实例id,如图:
在这里插入图片描述

服务注册,可以看到两个实例
在这里插入图片描述
ok,启动eureka server(服务注册中心),eureka服务提供者端,和feign服务消费者端
在这里插入图片描述
http://localhost:8083/findUser/mojombo
在这里插入图片描述
附录:

ok,本博客参考官方教程进行实践,仅仅作为入门的学习参考资料,详情可以参考Spring Cloud官方文档https://cloud.spring.io/spring-cloud-static/spring-cloud-openfeign/2.2.0.RELEASE/reference/html/

代码例子下载:code download

优质学习资料参考:

  • 方志鹏大佬系列Spring Cloud博客:https://www.fangzhipeng.com/spring-cloud.html
  • 使用Spring Cloud与Docker实战微服务:https://eacdy.gitbooks.io/spring-cloud-book/content/
  • 程序员DD大佬系列Spring Cloud博客:http://blog.didispace.com/spring-cloud-learning/

发表评论

表情:
评论列表 (有 0 条评论,521人围观)

还没有评论,来说两句吧...

相关阅读