OpenFeign 服務呼叫與負載

CyrusHuang發表於2024-09-05

需要建兩個工程,一個是服務提供者,一個是服務呼叫者

服務提供者

一個普通的 nacos 服務,增加一個 controller 方法即可,上一篇文章剛說了,這裡簡單說下

<!-- 服務提供者不呼叫其他服務,所以只需要註冊到 nacos 的依賴 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

配置檔案

server:
  port: 8081

spring:
  application:
    name: my-provider-test
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 # Nacos服務註冊中心地址

程式碼

// 啟動類
@EnableDiscoveryClient
@SpringBootApplication
public class SpringbootApplication {
   public static void main(String[] args) {
           SpringApplication.run(SpringbootApplication.class,args);
       }

}

// controller
@RestController
public class TestController {

    @GetMapping("/test")
    public String testGetConfig(){
        return "test";
    }
}

服務消費者

pom 依賴

<!-- 服務呼叫,底層需要 loadbalancer 做負載 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>

<!-- 服務註冊 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

配置檔案

server:
  port: 8082

spring:
  application:
    name: my-consumer-test
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 # Nacos服務註冊中心地址

程式碼

// 一個 Feign 介面,value 是服務名稱
@FeignClient(value = "my-provider-test")
public interface TestFeign {

    // 這個方法要和服務提供者那裡保持一致
    @GetMapping("/test")
    String test();

}

// controller
@RestController
public class Controller {

    @Resource
    private TestFeign testFeign;

    @GetMapping("/test")
    public String testFeign(){
        return testFeign.test();
    }

}

// 啟動類
@EnableDiscoveryClient
@SpringBootApplication
@EnableFeignClients // 開啟 Feign
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
}

啟動服務,nacos 能看到這倆服務

OpenFeign 服務呼叫與負載

呼叫介面測試

OpenFeign 服務呼叫與負載

生產中一般不會不是這樣,通常服務提供者也是消費者,一般 controlle 繼承 Feign 介面,@RequestMapping、@RequestBody 等這些註解也能繼承,所以 Feign 中既定義了 Feign 也定義了介面,如果接入 swagger,swagger 以 controller 來構建 dock,這樣程式碼就會清爽很多

相關文章