実は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 クライアントです。
@FeignClient
Feign クライアントを定義するアノテーションです。このクライアントは、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 のリストに変換します。orderFeignClient
queryOrders
次に、Logistic
Logistics という名前の物流エンティティを作成し、物流注文番号、作成時刻、および注文 ID リストを物流エンティティのプロパティとして設定します。最後に、物流注文番号、作成時刻、注文 ID リストを含む物流注文情報を出力します。このサービスの機能は、物流注文情報を構築し、その後の物流業務のためのデータ サポートを提供することです。
5.コントローラー
@RestController
public class LogisticController {
@Autowired
LogisticsService logisticsService;
@GetMapping("/logistic/create")
public String create() {
logisticsService.createLogisticsList();
return "OK";
}
}
このクラスは、HTTP GET メソッド要求を使用する@RestController
Web インターフェースを提供する、アノテーションを使用して識別されるSpring ベースの REST サービス コントローラーです。/logistic/create
リクエストの処理ロジックはcreate
メソッドで定義され、依存性注入によって名前付きサービスを自動的にアセンブルしlogisticsService
、LogisticsService
サービス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-service
。Eureka クライアントが構成され、Eureka サービス登録センターのアドレスが指定されますhttp://localhost:8081/eureka/
。
最後に、サービスを開始します。
访问:http://localhost:8084/logistic/create
コンソールに次の内容が表示された場合は、呼び出しが成功したことを意味します。