1.はじめに
リモート呼び出し
の主な原則RMIリモート呼び出しは、一方のマシンのJVMのクラスまたはメソッドが、もう一方のマシンのJVMのクラスまたはメソッドを呼び出す必要があることです。2つのマシンはクロスプラットフォームにすることができます。SSHアーキテクチャシステムでは、アクセスするアドレスバーにURLを入力しますが、サーバー上のJEEコンテナ内のビジネスにアクセスしています(JEEコンテナで実行されるJAVAプログラムはJVMでも実行されています)。 SSHシステムは他を呼び出す必要がありますマシンのEJBビジネスシステム(おそらくあなたは特定のビジネスのためのものです)の場合、呼び出しは純粋に相手の関連するビジネス処理を使用するためのものであり、結果データを返すだけで、次にリモートを返す必要がありますこの時点で呼び出しを行うことができます。RMIは、相手のJEEコンテナで特定のサービスを呼び出します(相手のJEEコンテナでのビジネス実行は相手のマシンのJVMです)。これは関連するJAVA呼び出しではありません。異なるマシン上のJVM?この一節があなたのお役に立てば幸いです。
2.なぜリモートコールを行う必要があるのですか?
商品サービスとメンバーシップサービスの2つのプロジェクトAとBがあるとします。ユーザーが商品を正常に購入したら、注文の詳細に商品情報を追加する必要があります。また、注文の詳細に商品情報を追加する必要があります。ユーザーが商品を購入した後のポイントも、メンバーシップサービスの関連テーブルに追加されます。この時点で、メンバーシップサービスの関連するビジネスロジックコードにアクセスできない場合
コモディティサービスから、この時点で、リモートコールを行って必要な情報を取得するか、メンバーシップサービスの関連テーブルに関連情報を保存する必要があります。3。sping-cloudfeignの使用方法?
3.1スプリングクラウドの導入次のように、リモートで呼び出す必要のあるプロジェクト内の関連する依存関係とレジストリ(ここではnacos)およびその他の関連する依存関係。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--注册中心nacos-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
2.構成ファイル(bootstrap.properties)で構成センターのアドレスと名前空間名を指定します。
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.namespace=0d5d1292-bb42-4635-92af-a3d06faaa726
spring.cloud.nacos.config.group=dev
application.yml:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
3.製品サービスとメンバーサービスのスタートアップクラスの両方に登録検出アノテーションを追加します@EnableDiscoveryClient
。4 。製品サービスに新しい偽のパッケージを作成し、次のようにインターフェイスを作成します。
import com.atguigu.common.to.SkuReductionTo;
import com.atguigu.common.to.SpuBoundTo;
import com.atguigu.common.utils.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
/***
* 声明式的远程调用
*/
//远程调用的会员服务项目名称
@FeignClient("gulimall-coupon")
public interface CouponFeignService {
/**
* 1、CouponFeignService.saveSpuBounds(spuBoundTo);
* 1)、@RequestBody将这个对象转为json。
* 2)、找到gulimall-coupon服务,给/coupon/spubounds/save发送请求。
* 将上一步转的json放在请求体位置,发送请求;
* 3)、对方服务收到请求。请求体里有json数据。
* (@RequestBody SpuBoundsEntity spuBounds);将请求体的json转为SpuBoundsEntity;
* 只要json数据模型是兼容的。双方服务无需使用同一个to
* @param spuBoundTo
* @return
*/
//会员服务中心调用方法的路径
@PostMapping("/coupon/spubounds/save")
R saveSpuBounds(@RequestBody SpuBoundTo spuBoundTo);
@PostMapping("/coupon/skufullreduction/saveinfo")
R saveSkuReduction(@RequestBody SkuReductionTo skuReductionTo);
}
/** 还有其他方式
* /coupon/spubounds/save
* 1)、让所有请求过网关;
* 1、@FeignClient("gulimall-gateway"):给gulimall-gateway所在的机器发请求
* 2、/api/coupon/spubounds/save
* 2)、直接让后台指定服务处理
* 1、@FeignClient("gulimall-gateway")
* 2、/product/skuinfo/info/{skuId}
*
*/
この時点で、商品サービスのメンバーシップサービスで関連するビジネスロジックコードを呼び出すことができます。