package com.imooc.product.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ServerController {
@GetMapping("/msg")
public String msg() {
return "this is product' msg";
}
}
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
package com.imooc.order;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.feign.EnableFeignClients;
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class OrderApplication {
public static void main(String[] args) {
SpringApplication.run(OrderApplication.class, args);
}
}
package com.imooc.order.client;
import com.imooc.order.dataobject.ProductInfo;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
@FeignClient(name = "product")
public interface ProductClient {
@GetMapping("/msg")
String productMsg();
@PostMapping("/product/listForOrder")
List<ProductInfo> listForOrder(@RequestBody List<String> productIdList);
}
package com.imooc.order.controller;
import com.imooc.order.client.ProductClient;
import com.imooc.order.dataobject.ProductInfo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Arrays;
import java.util.List;
@RestController
@Slf4j
public class ClientController {
@Autowired
private ProductClient productClient;
@GetMapping("/getProductMsg")
public String getProductMsg() {
String response = productClient.productMsg();
log.info("response={}", response);
return response;
}
@GetMapping("/getProductList")
public String getProductList() {
List<ProductInfo> productInfoList = productClient.listForOrder(Arrays.asList("164103465734242707"));
log.info("response={}", productInfoList);
return "ok";
}
}
Feignは、アプリケーション間の通信、注文商品の商品サービスの呼び出し、およびfeignの適用に使用されます
- これを使用する場合は、pom.xmlに適切な依存関係を追加する必要があります。
- スタートアップメインクラス(OrderApplication)で@EnableFeignClientsに注釈を付けます。
- クライアントで呼び出されるサービスとインターフェース(ProductClient)を定義します。主に@FeignClientマッチングサービス@GetMappingマッチングメソッドを通じて製品サービスを呼び出すための製品詳細インターフェースproductMsg()を次に示します。
- クライアントにClientControllerを追加し、ProductClient依存関係を挿入して、ProductClientのgetProductMsg()を呼び出します。
- Feignは主にFeignクライアント+リボンです。Feignは実際には@FeignClientアノテーション付きインターフェースのserviceName +リボンを通じてターゲットサービスのIPとポートを取得し、@ FeignClientアノテーション付きインターフェースのメソッドのrequestMappingアノテーションに従って完全なリクエストを組み立てます。 URL、次にrestTemplateを使用してターゲットURLをリクエストします。