Feign實現服務間的調用(學習筆記, 2019.11.28)

Feign實現服務間的調用(學習筆記, 2019.11.28)

1. 加入Fegin依賴:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2. 在啓動類加上@EnableFeignClients註解,開啓Feign的功能

@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients //加上註解啓用fegin功能
public class ClientApplication {

    public static void main(String[] args) {
        SpringApplication.run(ClientApplication.class, args);
    }
}

3.定義一個feign接口,通過@ FeignClient(“服務名”),來指定調用哪個服務比如在代碼中調用了service-test服務的“/hi”接口,代碼如下:

@FeignClient("service-test") //註解要指定服務名 _不能有下劃線
public interface  FeginHiClient {
    //service-hi服務中名字爲"hi"的接口
    @GetMapping("/hi")
    String sayHi();
}

注意事項:

  • 接口上通過註解指定要調用的微服名稱(不能有下劃線)
  • 接口中寫具體的被調用的方法(參考被調用的微服controller類中的方法) 注:記得添加controller類上的路徑
  • 調用方通過@Autowired注入接口即可調用
  • 注意啓動順序: 註冊中心->被調用的微服->調用方微服

4.在controller層,對外暴露一個"getHi"的API接口,通過上面定義的Feign客戶端FeginHiClient來消費服務(調用方通過@Autowired注入接口即可調用)

//編譯器報錯,無視。 
//因爲這個Bean是在程序啓動的時候注入的,編譯器感知不到,所以報錯。
@Autowired
private FeginHiClient feginHiClient;

@GetMapping("/getHi")
    public String hiFromFegin() {
        return feginHiClient.sayHi();
    }

5.啓動程序,多次訪問http://localhost:8080/getHi,瀏覽器交替顯示

hi!i am come from 8862hi!
i am come from 8863

至此,使用Feign消費服務已實現,Feign內置ribbon,帶負載均衡的效果

擴展:帶參數的feign接口寫法: (更爲詳細網站資料)

注意 : 有參數一定要有註解並指定參數名稱,否則出錯

@FeignClient("EUREKA-TEST")
public interface TestService {

    @GetMapping("/findOneMap")
    Map<String, Object> findOneMap(@RequestParam("id") String id);

}

--------------------------------restful風格 ↓--------------------------------
  
@FeignClient("tensquare-base")
public interface LabelClient {

    @RequestMapping(value="/label/{id}", method = RequestMethod.GET)
    public Result findById(@PathVariable("id") String id);
}

----------------------------傳遞json實體參數使用 @RequestBody----------------------
@RequestMapping(value = "/add",method = RequestMethod.POST)
String add(@RequestBody User user);

Feign的優勢(相比RestTemplate)

1.聲明式的REST客戶端,通過編寫簡單的接口和插入註解,只需要像調用本地方法一樣調用它就可以完成服務請求及相關處理,使REST調用更加簡單

若使用RestTemplate,則需要深入瞭解HTTP級別API的細節。

客戶端,通過編寫簡單的接口和插入註解,只需要像調用本地方法一樣調用它就可以完成服務請求及相關處理,使REST調用更加簡單

若使用RestTemplate,則需要深入瞭解HTTP級別API的細節。

2.內置Ribbon,配合Eureka實現負載均衡

發佈了29 篇原創文章 · 獲贊 3 · 訪問量 1616
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章