在上一章的学习中, 我们知道了微服务的基本概念, 知道怎么基于 Ribbon+restTemplate 的方式实现服务调用, 接着上篇博客, 我们学习怎么基于 Feign 实现服务调用, 请先学习上篇博客, 然后再学习本篇博客
Feign 是一个声明式的 web service 客户端, 它使得编写 Web service 客户端更为容易. 创建接口, 为接口添加注解, 即可使用 Feign.Feign 可以使用 Feign 注解或者 JAX-RS 注解, 还支持热插拔的编码器和解码器.
环境准备:
- JDK 1.8
- SpringBoot2.2.1
- SpringCloud(Hoxton.SR6)
- Maven 3.2+
开发工具
- IntelliJ IDEA
- smartGit
创建一个 SpringBoot Initialize 项目, 详情可以参考我之前博客: SpringBoot 系列之快速创建项目教程
- port: 8083
- spring:
- application:
- name: feign-service-consumer
- eureka:
- client:
- service-url:
- defaultZone: http://localhost:8761/eureka/
- healthcheck:
- enabled: false
- instance:
- status-page-url-path: http://localhost:8761/actuator/info
- health-check-url-path: http://localhost:8761/actuator//health
- prefer-ip-address: true
- instance-id: feign-service-consumer8083
@FeignClient 指定服务名称,@RequestMapping 指定要调用的接口
- package com.example.springcloud.client.service;
- import com.example.springcloud.client.bean.User;
- import org.springframework.cloud.openfeign.FeignClient;
- import org.springframework.stereotype.Service;
- import org.springframework.Web.bind.annotation.PathVariable;
- import org.springframework.Web.bind.annotation.RequestMapping;
- import org.springframework.Web.bind.annotation.RequestMethod;
- /**
- * <pre>
- * UserService
- * </pre>
- *
- * <pre>
- * @author mazq
- * 修改记录
- * 修改后版本: 修改人: 修改日期: 2020/07/28 13:09 修改内容:
- * </pre>
- */
- @FeignClient(value = "EUREKA-SERVICE-PROVIDER")
- @Service
- public interface UserService {
- @RequestMapping(value = "/api/users/{username}",method = RequestMethod.GET)
- User findGithubUser(@PathVariable("username")String username);
- }
加上 @EnableEurekaClient,@EnableFeignClients, 写个接口进行测试
- package com.example.springcloud.client;
- import com.example.springcloud.client.bean.User;
- import com.example.springcloud.client.service.UserService;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.boot.SpringApplication;
- import org.springframework.boot.autoconfigure.SpringBootApplication;
- import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
- import org.springframework.cloud.openfeign.EnableFeignClients;
- import org.springframework.scheduling.annotation.Async;
- import org.springframework.Web.bind.annotation.GetMapping;
- import org.springframework.Web.bind.annotation.PathVariable;
- import org.springframework.Web.bind.annotation.RestController;
- @SpringBootApplication
- @EnableEurekaClient
- @EnableFeignClients
- @RestController
- public class SpringcloudFeignClientApplication {
- @Autowired
- UserService userService;
- public static void main(String[] args) {
- SpringApplication.run(SpringcloudFeignClientApplication.class, args);
- }
- @GetMapping("/findUser/{username}")
- public User index(@PathVariable("username")String username){
- return userService.findGithubUser(username);
- }
- }
要运行 eureka 服务端, eureka 服务提供者, 代码请参考上一章博客
补充: IDEA 中多实例运行方法
step1: 如图, 不要加上勾选
step2: 指定不同的 server 端口和实例 id, 如图:
服务注册, 可以看到两个实例
ok, 启动 eureka server(服务注册中心),eureka 服务提供者端, 和 feign 服务消费者端
http://localhost:8083/findUser/mojombo
附录:
ok, 本博客参考官方教程进行实践, 仅仅作为入门的学习参考资料, 详情可以参考 Spring Cloud 官方文档
代码例子下载: code download
优质学习资料参考:
方志鹏大佬系列 Spring Cloud 博客: https://www.fangzhipeng.com/spring-cloud.html
使用 Spring Cloud 与 Docker 实战微服务:
程序员 DD 大佬系列 Spring Cloud 博客: http://blog.didispace.com/spring-cloud-learning/
来源: https://www.cnblogs.com/mzq123/p/13390852.html