1. 程式人生 > 其它 >SpringCloud06---Feign:負載均衡(整合Ribbon)

SpringCloud06---Feign:負載均衡(整合Ribbon)

1. Feign簡介

Feign是宣告式Web Service客戶端,它讓微服務之間的呼叫變得更簡單,類似controller呼叫service。SpringCloud集成了Ribbon和Eureka,可以使用Feigin提供負載均衡的http客戶端

Feign,主要是社群版,大家都習慣面向介面程式設計。這個是很多開發人員的規範。只需要建立一個介面,然後添加註解即可,呼叫微服務訪問兩種方法

  • 微服務名字 【ribbon】
  • 介面和註解 【feign】

2. Feign的使用步驟

  1. 建立springcloud-consumer-dept-feign模組

  2. 拷貝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>
  1. 拷貝springcloud-consumer-dept-80模組下的resource,以及java程式碼到springcloud-consumer-feign模組

  2. 新建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);
}
  1. 改造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();
    }
}
  1. 主配置類
@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,只不過後者是在呼叫方式上,為了滿足一些開發者習慣的介面呼叫習慣