在上一章的學習中,我們知道了微服務的基本概念,知道怎麼基於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官方文檔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/