SpringCloud系列之使用Feign進行服務呼叫

smileNicky發表於2020-07-28

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

優質學習資料參考:

相關文章