マイクロサービス コンバット 04 - 偽装サービス コール

実はfeignの前にRibbonというものがあって、その原理はrpcリモートコールです。

私たちのチュートリアルでは、リボンについては説明しませんが、feign についてのみ説明します。なぜなら、feign は実際には、現在ほとんどの企業が選択している Robbon のパッケージだからです。

1.物流モジュール

もうナンセンスではありません。このセクションでロジスティクス モジュールを作成しましょう。最初に作成しましょう。

ロジスティクス システムは、eureka-client に属する eureka にも登録する必要があります。

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

feign が使用されているため、この依存関係を追加する必要があります

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

ロジスティクス システムは外部インターフェイスも提供できるため、Web 依存関係を追加する必要があります。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

このように、基本的な構成はOKです。

2. 注文と物流

物流システムの機能として、例えば、注文リストを取得し、物流注文を再現することができる。次に、注文が必要なエンティティ:

注文システムの注文クラスを直接コピーするだけです。

別の物流クラス

/**
 * 物流单
 */
public class Logistic {
 private Integer logisticId;   //物流单ID
 private List<Integer> orderIds;  //订单集合
 private String date;    //创建时间
 public Integer getLogisticId() {
  return logisticId;
 }
 public void setLogisticId(Integer logisticId) {
  this.logisticId = logisticId;
 }
 public List<Integer> getOrderIds() {
  return orderIds;
 }
 public void setOrderIds(List<Integer> orderIds) {
  this.orderIds = orderIds;
 }
 public String getDate() {
  return date;
 }
 public void setDate(String date) {
  this.date = date;
 }
 
}

3. 顧客を装う

偽のクライアントは、rpc が外部システム インターフェイスをリモートで呼び出すためのブリッジです. 専門用語を多く言っても無駄です. コードを直接見てみましょう.

@FeignClient(value = "ORDER-DATA-SERVICE")
public interface OrderFeignClient {

 @GetMapping("/order/list")
 public List<Order> queryOrders();
}

これは、Spring Cloud Netflix に基づいて開発された Feign クライアントです。

@FeignClientFeign クライアントを定義するアノテーションです。このクライアントは、ORDER-DATA-SERVICEサービスをリモートで呼び出すために使用されます。

valueプロパティは、呼び出されるサービスの名前を指定しますORDER-DATA-SERVICE

OrderFeignClientクライアントのリクエスト メソッドを定義するために使用されるインターフェイスです。

この例では、クライアントはqueryOrdersという名前のメソッドを定義します。このメソッドは、ORDER-DATA-SERVICEサービスの/order/listインターフェイスをリモートで呼び出して注文リスト データを取得します。

このインターフェースは、HTTP GET メソッドを使用して要求され、List<Order>このインターフェースの戻り値です。

この Feign クライアントを使用することで、マイクロサービス アーキテクチャ内のサービス間の通信が便利になります。

誰もがこのクライアントを観察します、それは何かのように見えますか?

そうですよね、特にコントローラーみたいじゃないですか?偽のクライアントはコントローラーに相当し、他のサービスのインターフェースを呼び出すために使用されます。

4. 偽のクライアントを適用する場所

これは決定的ではありませんが、通常はサービス層で使用します。

@Service
public class LogisticsServiceImpl implements LogisticsService{
 
 @Autowired
 private OrderFeignClient orderFeignClient; 

 @Override
 public void createLogisticsList() {
  List<Order> orders = orderFeignClient.queryOrders();
  List<Integer> orderIds = orders.stream().map(Order::getOrderId).collect(Collectors.toList());
  
  System.out.println(String.format("订单号:%s", orderIds));
  
  Logistic logistic = new Logistic();
  logistic.setLogisticId(1);
  logistic.setDate(DateUtil.now());
  logistic.setOrderIds(orderIds);
  
  System.out.println(String.format("物流单:%s\n创建时间:%s", logistic.getLogisticId(),logistic.getDate()));
  
 }
 

}

これは、インターフェースLogisticsServiceImplを実装する と呼ばれる Spring Service 実装クラスです。LogisticsServiceこのサービスは、物流注文を作成するために使用されます。orderFeignClientこのサービスでは、名前付きOrderFeignClientクライアントが注入され、これを使用してORDER-DATA-SERVICEサービスをリモートで呼び出し、注文リスト データを取得します。

サービスメソッドでは、クライアントメソッドcreateLogisticsListを呼び出して注文データを取得し、Java 8 の Stream API を使用して注文リストを注文 ID のリストに変換します。orderFeignClientqueryOrders

次に、LogisticLogistics という名前の物流エンティティを作成し、物流注文番号、作成時刻、および注文 ID リストを物流エンティティのプロパティとして設定します。最後に、物流注文番号、作成時刻、注文 ID リストを含む物流注文情報を出力します。このサービスの機能は、物流注文情報を構築し、その後の物流業務のためのデータ サポートを提供することです。

5.コントローラー

@RestController
public class LogisticController {
 
 @Autowired
 LogisticsService logisticsService;
 
 @GetMapping("/logistic/create")
 public String create() {
  logisticsService.createLogisticsList();
  return "OK";
 }

}

このクラスは、HTTP GET メソッド要求を使用する@RestControllerWeb インターフェースを提供する、アノテーションを使用して識別されるSpring ベースの REST サービス コントローラーです。/logistic/createリクエストの処理ロジックはcreateメソッドで定義され、依存性注入によって名前付きサービスを自動的にアセンブルしlogisticsServiceLogisticsServiceサービスcreateLogisticsListメソッドを呼び出してロジスティクス オーダーを作成します。最後に、OK物流注文が正常に作成されたことを示す文字列が返されます。この Web インターフェイスを呼び出すことにより、ロジスティクス オーダーを作成する操作をトリガーできます。

6.スタートアップクラス

物流マイクロサービスも単一のプロジェクトであり、独立してデプロイする必要がありますが、feign を使用しているため、@EnableEurekaClientこの3 つのアノテーションを追加する必要があります。@EnableDiscoveryClient@EnableFeignClients

@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
@EnableFeignClients
public class Application {
 
 public static void main(String[] args) {
  SpringApplication.run(Application.class, args);
 }
}

構成ファイル

spring:
  application:
    name: logistic-service
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8081/eureka/

アプリケーションの名前を として定義しますlogistic-serviceEureka クライアントが構成され、Eureka サービス登録センターのアドレスが指定されますhttp://localhost:8081/eureka/

最後に、サービスを開始します。

访问:http://localhost:8084/logistic/create

コンソールに次の内容が表示された場合は、呼び出しが成功したことを意味します。

おすすめ

転載: blog.csdn.net/weixin_39570751/article/details/129618835