首頁 > 軟體

SpringCloud OpenFeign超詳細講解模板化遠端通訊的實現

2022-07-12 14:02:10

1. openFeign實現

基於spring-boot-starter-parent 2.6.8,spring-cloud-dependencies 2021.0.3,一個order服務一個user服務

1.1 pom依賴

<!--nacos服務註冊與發現-->
<dependency>
	<groupId>com.alibaba.cloud</groupId>
	<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
	<version>2021.0.1.0</version>
</dependency>
<!--遠端服務呼叫-->
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>
<!--服務呼叫feign-->
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

1.2 yaml設定

order呼叫端,設定的超時設定註釋掉了只為記錄

spring:
  application:
    name: orderservice
  cloud:
    #找對應網段的網路卡 不設定內部服務就走外網
    inetutils:
      preferred-networks: 192.168.0
    nacos:
      discovery:
        server-addr: 192.168.0.221:8848
#feign:
#  client:
#    config:
#      #default設定的是全域性超時時間,對所有的openFeign介面服務都生效 預設60s超時
#      default:
#        connectTimeout: 5000
#        readTimeout: 5000
#      #為某個服務設定超時時間 優先於全域性
#      userservice:
#        connectTimeout: 5000
#        readTimeout: 5000

user服務僅需要註冊

spring:
  application:
    name: userservice
  cloud:
    #找對應網段的網路卡 不設定內部服務就走外網
    inetutils:
      preferred-networks: 192.168.0
    nacos:
      discovery:
        server-addr: 192.168.0.221:8848

遠端呼叫依賴於註冊中心,這裡用的是nacos,其他的eureka也可以的

1.3 使用者端呼叫程式碼

  • 啟動類上新增@EnableFeignClients註解
  • api介面,可以單獨放在api包
@FeignClient(value = "userservice")
//沒有註冊中心的服務呼叫使用  testFeign/隨便寫
//@FeignClient(value = "testFeign",url = "http://192.168.0.199:7540")
public interface UserService {
    //預設是@RequestBody註解引數 
    //如果使用其他註解一定要帶上value 否者會報錯 RequestParam.value() was empty on parameter 1
    @GetMapping("/getTime/{uuid}")
    String getTime(@PathVariable("uuid") String uuid, @RequestParam("name") String name);
    @PostMapping("/postTime")
    Map<String, Object> getTime(@RequestBody Map<String, Object> params);
}

使用者端程式碼

	@Resource
    UserService userService;
    @GetMapping("/test")
    public String test() throws Exception {
        log.info("openFeign -- start");
        Map<String, Object> time = userService.getTime(resMap);
        log.info("openFeign -- {}", time);
        return template + ":" + time;
    }

1.4.伺服器端暴露介面

    @PostMapping("/postTime")
    public Map<String, Object> getTime(@RequestBody Map<String, Object> params) {
        params.put("time", new Date().getTime());
        return params;
    }

1.5.測試紀錄檔

c.e.order.controller.OrderController     : openFeign -- start
c.e.order.controller.OrderController     : openFeign -- {aaaa=bbbb, time=1657187048104}

到此這篇關於SpringCloud OpenFeign超詳細講解模板化遠端通訊的實現的文章就介紹到這了,更多相關SpringCloud OpenFeign模板化遠端通訊內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com