SpringCloud06---Feign:負載均衡(整合Ribbon)
阿新 • • 發佈:2021-08-10
1. Feign簡介
Feign是宣告式Web Service客戶端,它讓微服務之間的呼叫變得更簡單,類似controller呼叫service。SpringCloud集成了Ribbon和Eureka,可以使用Feigin提供負載均衡的http客戶端
Feign,主要是社群版,大家都習慣面向介面程式設計。這個是很多開發人員的規範。只需要建立一個介面,然後添加註解即可,呼叫微服務訪問兩種方法
- 微服務名字 【ribbon】
- 介面和註解 【feign】
2. Feign的使用步驟
-
建立springcloud-consumer-dept-feign模組
-
拷貝springcloud-consumer-dept-80模組下的pom.xml,並新增feign依賴;並且也在springcloud-api模組中新增feign依賴
<!--Feign的依賴-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
<version>1.4.7.RELEASE</version>
</dependency>
-
拷貝springcloud-consumer-dept-80模組下的resource,以及java程式碼到springcloud-consumer-feign模組
-
新建service包,並新建DeptClientService.java介面
// @FeignClient:微服務客戶端註解,value:指定微服務的名字,這樣就可以使Feign客戶端直接找到對應的微服務 @FeignClient(value = "SPRINGCLOUD-PROVIDER-DEPT") public interface DeptClientService { @GetMapping("/dept/get/{id}") public Dept queryById(@PathVariable("id") Long id); @GetMapping("/dept/list") public List<Dept> queryAll(); @GetMapping("/dept/add") public boolean addDept(Dept dept); }
- 改造DeptConsumerController.java
@RestController
public class DeptConsumerController {
@Autowired
private DeptClientService deptClientService;
@RequestMapping("/consumer/dept/add")
public boolean add(Dept dept) {
return deptClientService.addDept(dept);
}
@RequestMapping("/consumer/dept/get/{id}")
public Dept get(@PathVariable("id") Long id) {
return deptClientService.queryById(id);
}
@RequestMapping("/consumer/dept/list")
public List<Dept> list() {
return deptClientService.queryAll();
}
}
- 主配置類
@SpringBootApplication
@EnableEurekaClient
// feign客戶端註解,並指定要掃描的包以及配置介面DeptClientService
@EnableFeignClients(basePackages = {"com.haust.springcloud"})
// 切記不要加這個註解,不然會出現404訪問不到
//@ComponentScan("com.haust.springcloud")
public class FeignDeptConsumer_80 {
public static void main(String[] args) {
SpringApplication.run(FeignDeptConsumer_80.class, args);
}
}
3. Feign和Ribbon如何選擇
Feign和Ribbon二者對比,前者顯現出面向介面程式設計特點,程式碼看起來更清爽,而且Feign呼叫方式更符合我們之前在做SSM或者SprngBoot專案時,Controller層呼叫Service層的程式設計習慣!
根據個人習慣而定,如果喜歡REST風格使用Ribbon;如果喜歡社群版的面向介面風格使用Feign.
Feign 本質上也是實現了 Ribbon,只不過後者是在呼叫方式上,為了滿足一些開發者習慣的介面呼叫習慣