Springboot+Dubboを使用して分散マイクロサービスを構築し、プロセス全体にわたって開発に注釈を付ける

Springboot+Dubboを使用して分散マイクロサービスを構築し、プロセス全体にわたって開発に注釈を付ける

インターネットの発展に伴い、ウェブサイトアプリケーションの規模は拡大し続けています。従来の垂直アプリケーション アーキテクチャでは、これに対応できなくなりました。分散サービス アーキテクチャと流動的なコンピューティング アーキテクチャが不可欠です。アーキテクチャの秩序ある進化を確実にするために、ガバナンス システムが緊急に必要です。

[[326586]]

1. まずは写真を見てみましょう

ダボといえば、皆さんもよくご存知だと思います! Alibaba のオープンソースの高性能で優れたサービス フレームワークにより、アプリケーションは高性能 RPC を通じてサービス出力および入力機能を実装でき、Spring フレームワークとシームレスに統合できます。

ダボアーキテクチャ図

ノードロールの説明:

  • プロバイダー: サービスを公開するサービスプロバイダー
  • コンシューマー: リモートサービスを呼び出すサービスコンシューマー
  • レジストリ: サービスの登録と検出のためのレジストリ
  • モニター: サービスコールの数と通話時間をカウントする監視センター
  • コンテナ: サービス実行コンテナ

2. 実装のアイデア

今日は、ユーザーが商品を選択して注文するプロセスを、ユーザー センター、商品センター、注文センターの 3 つのビジネス サービスに分割し、Springboot + Dubbo を使用して小さなデモを実装します。

サービスインタラクションのプロセスは次のとおりです。

この記事では主にSpringbootとDubboのフレームワーク統合と開発実践について紹介します。実際のビジネス サービスの分割は非常に複雑なプロセスであり、ここで紹介したものよりもはるかに複雑です。上記の 3 つのサービスは、プロジェクトのデモンストレーションのみを目的としています。なぜこのように分割されているかについてはあまり心配しないでください。

はい、もう無駄な話はやめて、始めましょう!

  • 1. Centos7仮想マシンを4台作成し、そのうちの1台にZooKeeperをインストールする
  • 2. マイクロサービスプロジェクトを構築し、コードを書く
  • 3. Centos7にマイクロサービスをデプロイする
  • 4. リモートサービスコールテスト

3. Zookeeperのインストール

Dubboを使用する前に、登録センターが必要です。現在、ダボが選択できる登録センターには、zookeeper、Nacos などがあります。一般的には、zookeeper を使用することをお勧めします。

まず、Zookeeper をインストールする前に、JDK をインストールして設定する必要があります。このマシンはOracle Java8 SEを使用します。

  • JDK をインストールします (すでにインストールされている場合は無視できます)
  1. yum -y java-1.8.0-openjdk をインストールします
  • Javaのインストールステータスを確認する
  1. java バージョン

  • JDKをインストールしたら、Zookeeperをダウンロードしてインストールします。
  1. #飼育係のフォルダを作成する
  2. cd /usr
  3. mkdir 動物園の飼育係
  4.  
  5. #zookeeper-3.4.14 バージョンをダウンロード
  6. http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz を取得します。
  7.  
  8. #解凍
  9. tar -zxvf zookeeper-3.4.14.tar.gz
  • データとログのディレクトリを作成する
  1. #データとログを保存するためのディレクトリを作成する
  2. cd /usr/zookeeper/
  3. mkdirデータ
  4. mkdir ログ
  5.  
  6. #conf の下にある zoo_sample.cfg ファイルをバックアップし、名前を zoo.cfg に変更します。
  7. cd conf/
  8. cp zoo_sample.cfg zoo.cfg
  • ZooKeeper を構成する
  1. #zoo.cfgファイルを編集する
  2. vim zoo.cfg

  • 飼育係を始める
  1. #Zookeeperのbinディレクトリに入る
  2. cd zookeeper/zookeeper-3.4.14/bin
  3.  
  4. #Zookeeper を起動する
  5. ./zkServer.sh 開始
  6.  
  7. #Zookeeper のステータスを照会する
  8. ./zkServer.sh ステータス
  9.  
  10. #飼育係のステータスを閉じる
  11. ./zkServer.sh 停止

起動が成功したことを示す次のメッセージが表示されます。

IV.プロジェクト紹介

  • springboot バージョン: 2.1.1.RELEASE
  • Zookeeper バージョン: 3.4.14
  • ダボバージョン: 2.7.3
  • mybtais-plus バージョン: 3.0.6
  • データベース: mysql-8
  • ビルドツール: Maven
  • サービスモジュール: ユーザーセンター、製品センター、注文センター

5. コードの練習

5.1.データベースを初期化する

まず、MySQL クライアントに dianshang-user、dianshang-platform、dianshang-business の 3 つのデータベースを作成します。

  • dianshang-userデータベースで、ユーザーテーブルtb_userを作成し、データを初期化します。

  • dianshang-platformデータベースで、製品テーブルtb_productを作成し、データを初期化します。

  • dianshang-platformデータベースに、注文テーブルtb_orderと注文詳細テーブルtb_order_detailを作成します。

5.2.プロジェクトを作成する

データベース テーブルの設計が完了したら、IDEA で dianshang という名前の Springboot プロジェクトを作成します。

最終的なディレクトリは次のようになります。

ディレクトリ構造の説明:

  • dianshang-common: 主にいくつかの公開ツールライブラリを保存し、すべてのサービスがそれらに依存できます。
  • dianshang-business: 注文センター。APIモジュールは主にダボサービス公開インターフェースを提供し、プロバイダーモジュールはサービス処理操作を提供するスプリングブートプロジェクトです。
  • dianshang-user: ユーザーセンター、APIモジュールとプロバイダーモジュールを含む、デザインは似ています
  • dianshang-platform: APIモジュールとプロバイダーモジュールを含む製品センター、デザインは似ています

すべての依存プロジェクトが使用できるように、親 pom ファイルに dubbo および zookeeper クライアントを追加します。

  1. <! -- ロンボク -->  
  2. <依存関係>
  3. <groupId>org.projectlombok</groupId>
  4. <artifactId>ロンボク</artifactId>
  5. <バージョン>1.18.4</バージョン>
  6. <scope>提供</scope>
  7. </依存関係>
  8.  
  9. <! -- Dubbo スプリングブートスターター -->  
  10. <依存関係>
  11. <グループID>org.apache.dubbo</グループID>
  12. <artifactId>ダボスプリングブートスターター</artifactId>
  13. <バージョン>2.7.3</バージョン>
  14. </依存関係>
  15. <! -- 登録センターとして zookeeper が使用されるため、zookeeper の依存関係を追加する必要があります -->  
  16. <依存関係>
  17. <グループ ID>org.apache.zookeeper</グループ ID>
  18. <artifactId>動物園の飼育係</artifactId>
  19. <バージョン>3.4.13</バージョン>
  20. <除外事項>
  21. <除外>
  22. <グループID>org.slf4j</グループID>
  23. <artifactId>slf4j-api</artifactId>
  24. </除外>
  25. <除外>
  26. <グループID>org.slf4j</グループID>
  27. <アーティファクトID>slf4j-log4j12</アーティファクトID>
  28. </除外>
  29. <除外>
  30. <グループID>log4j</グループID>
  31. <アーティファクトID>log4j</アーティファクトID>
  32. </除外>
  33. </除外>
  34. </依存関係>
  35. <! --キュレーターを動物園の飼育係クライアントとして使用する -->  
  36. <依存関係>
  37. <グループ ID>org.apache.curator</グループ ID>
  38. <artifactId>キュレーターフレームワーク</artifactId>
  39. <バージョン>4.2.0</バージョン>
  40. </依存関係>
  41. <依存関係>
  42. <グループ ID>org.apache.curator</グループ ID>
  43. <artifactId>キュレーターレシピ</artifactId>
  44. <バージョン>4.2.0</バージョン>
  45. </依存関係>

ヒント: 環境を設定するときに、エディターは落とし穴を発見しました。プロジェクトで依存する Zookeeper のバージョンとサーバーのバージョンは、可能な限り一貫している必要があります。たとえば、この例では、Zookeeper サーバーのバージョンは 3.4.14 なので、Zookeeper ファイル ライブラリに依存する場合は、一貫性を保つようにしてください。 Zookeeper の 3.5.x バージョンに依存している場合は、プロジェクトの開始時にあらゆる種類のモンスターと悪魔が報告されます。

5.3.ユーザーセンタープロジェクトを作成する

IDEAでdianshang-userサブモジュールを作成し、dianshang-commonモジュールに依存するようにします。

  1. <依存関係>
  2. <依存関係>
  3. <groupId>org.project.demo</groupId>
  4. <artifactId>dianshang-common</artifactId>
  5. <バージョン>1.0.0</バージョン>
  6. </依存関係>
  7. </依存関係>

同時に、dianshang-user-provider モジュールと dianshang-user-api モジュールを作成します。

  • dianshang-user-api: 主に他のサービスへのインターフェース公開を提供します
  • dianshang-user-provider: Webプロジェクトと同様に、主に基本的なビジネスのCRUDを担当し、dianshang-user-apiモジュールに依存しています。

5.3.1、dubboサービスの設定

dianshang-user-provider の application.yml ファイルで dubbo サービスを次のように設定します。

  1. #ユーザーセンターサービスポート
  2. サーバ:
  3. ポート: 8080
  4. #データソースの構成
  5. 春:
  6. データソース:
  7. ドルイド:
  8. ドライバークラス: com.mysql.cj.jdbc.Driver
  9. URL: "jdbc:mysql://localhost:3306/dianshang-user"  
  10. ユーザー名: root
  11. パスワード: 111111
  12. #dubbo 設定
  13. ダボ:
  14. スキャン:
  15. #パッケージ名は実際の状況に応じて記述する必要があります
  16. 基本パッケージ: org.project.dianshang。ユーザー 
  17. プロトコル:
  18. ポート: 20880
  19. 名前: ダボ
  20. レジストリ:
  21. #飼育員登録センター住所
  22. アドレス: zookeeper://192.168.0.107:2181

5.3.2.サービス公開インターフェースと実装クラスを記述する

dianshang-user-api モジュールで、UserApi インターフェイスを作成し、パラメーター オブジェクト UserVo! を返します。

  1. パブリックインターフェースUserApi {
  2.  
  3. /**
  4. * ユーザー情報の照会
  5. * @param ユーザーID
  6. * @戻る 
  7. */
  8. UserVo findUserById(文字列 userId);
  9. }

このうち、UserVo は次のようにシリアル化する必要があります。

  1. @データ
  2. @EqualsAndHashCode(callSuper = false )
  3. @Accessors(チェーン = true )
  4. パブリッククラスUserVoはSerializableを実装します{
  5.  
  6. プライベート静的最終long serialVersionUID = 1L;
  7.  
  8. /**
  9. * ユーザーID
  10. */
  11. プライベート文字列ユーザーID;
  12.  
  13. /**
  14. * ユーザーの中国語名
  15. */
  16. プライベート文字列userName;
  17. }

dianshang-user-provider モジュールで、UserApi インターフェース実装クラスを次のように記述します。

  1. @Service(インターフェースクラス =UserApi.class)
  2. @成分
  3. パブリッククラスUserProviderはUserApiを実装します{
  4.  
  5. オートワイヤード
  6. プライベート UserService userService;
  7.  
  8. @オーバーライド
  9. パブリックUserVo findUserById(文字列userId) {
  10. QueryWrapper<ユーザー> queryWrapper = 新しい QueryWrapper<ユーザー>();
  11. queryWrapper.eq( "user_id" 、userId);
  12. ユーザーソース = userService.getOne(queryWrapper);
  13. if (ソース != null ) {
  14. UserVo vo = 新しい UserVo();
  15. BeanUtils.copyProperties(ソース、vo);
  16. voを返します
  17. }
  18. 戻る ヌル;
  19. }
  20. }

アノテーション @Service は、Spring の下のアノテーションではなく、org.apache.dubbo.config.annotation.Service の下のアノテーションを参照します。

次は、製品センタープロジェクトの作成を続けましょう。

5.4.製品センタープロジェクトを作成する

ユーザーセンタープロジェクトと同様に、IDEAでdianshang-platformサブモジュールを作成し、dianshang-commonモジュールに依存します。

  1. <依存関係>
  2. <依存関係>
  3. <groupId>org.project.demo</groupId>
  4. <artifactId>dianshang-common</artifactId>
  5. <バージョン>1.0.0</バージョン>
  6. </依存関係>
  7. </依存関係>

同時に、dianshang-platform-provider モジュールと dianshang-platform-api モジュールを作成します。

  • dianshang-platform-api: 主に他のサービスへのインターフェース公開を提供します
  • dianshang-platform-provider: Webプロジェクトと同様に、主に基本的なビジネスのCRUDを担当し、dianshang-platform-apiモジュールに依存します。

5.4.1、dubboサービスの設定

dianshang-platform-provider の application.yml ファイルで dubbo サービスを次のように設定します。

  1. #ユーザーセンターサービスポート
  2. サーバ:
  3. ポート: 8081
  4. #データソースの構成
  5. 春:
  6. データソース:
  7. ドルイド:
  8. ドライバークラス: com.mysql.cj.jdbc.Driver
  9. URL: "jdbc:mysql://localhost:3306/dianshang-platform"  
  10. ユーザー名: root
  11. パスワード: 111111
  12. #dubbo 設定
  13. ダボ:
  14. スキャン:
  15. #パッケージ名は実際の状況に応じて記述する必要があります
  16. 基本パッケージ: org.project.dianshang.platform
  17. プロトコル:
  18. ポート: 20881
  19. 名前: ダボ
  20. レジストリ:
  21. #飼育員登録センター住所
  22. アドレス: zookeeper://192.168.0.107:2181

5.4.2.サービス公開インターフェースと実装クラスを記述する

dianshang-platform-api モジュールで、ProductApi インターフェイスを作成し、パラメーター オブジェクト ProductVo! を返します。

  1. パブリックインターフェースProductApi {
  2.  
  3. /**
  4. * 製品IDで製品情報を照会する
  5. * @param 製品ID
  6. * @戻る 
  7. */
  8. ProductVo クエリProductInfoById(文字列 productId);
  9. }

このうち、ProductVo は次のようにシリアル化する必要があります。

  1. @データ
  2. @EqualsAndHashCode(callSuper = false )
  3. @Accessors(チェーン = true )
  4. パブリッククラスProductVoはSerializableを実装します{
  5.  
  6. プライベート静的最終long serialVersionUID = 1L;
  7.  
  8. /**製品ID*/
  9. プライベート文字列製品ID;
  10.  
  11. /**製品名*/
  12. プライベート文字列productName;
  13.  
  14. /**製品価格*/
  15. プライベート BigDecimal productPrice;
  16. }

dianshang-platform-provider モジュールで、ProductApi インターフェース実装クラスを次のように記述します。

  1. @Service(インターフェースクラス = ProductApi.class)
  2. @成分
  3. パブリッククラスProductProviderはProductApiを実装します{
  4.  
  5. オートワイヤード
  6. プライベートProductService productService;
  7.  
  8. @オーバーライド
  9. パブリックProductVoクエリProductInfoById(文字列productId) {
  10. //製品IDで情報を照会する
  11. 製品ソース = productService.getById(productId);
  12. if (ソース != null ) {
  13. ProductVo vo = 新しい ProductVo();
  14. BeanUtils.copyProperties(ソース、vo);
  15. voを返します
  16. }
  17. 戻る ヌル;
  18. }
  19. }

次に、注文センタープロジェクトの作成を続けましょう。

5.5.注文センタープロジェクトを作成する

製品センタープロジェクトと同様に、IDEAでdianshang-businessサブモジュールを作成し、dianshang-commonモジュールに依存します。

  1. <依存関係>
  2. <依存関係>
  3. <groupId>org.project.demo</groupId>
  4. <artifactId>dianshang-common</artifactId>
  5. <バージョン>1.0.0</バージョン>
  6. </依存関係>
  7. </依存関係>

同時に、dianshang-business-provider モジュールと dianshang-business-api モジュールを作成します。

  • dianshang-business-api: 主に他のサービスへのインターフェース公開を提供します
  • dianshang-business-provider: Webプロジェクトと同様に、主に基本的なビジネスのCRUDを担当し、dianshang-business-apiモジュールに依存しています。

5.5.1、dubboサービスの設定

dianshang-business-provider の application.yml ファイルで dubbo サービスを次のように設定します。

  1. #ユーザーセンターサービスポート
  2. サーバ:
  3. ポート: 8082
  4. #データソースの構成
  5. 春:
  6. データソース:
  7. ドルイド:
  8. ドライバークラス: com.mysql.cj.jdbc.Driver
  9. URL: "jdbc:mysql://localhost:3306/dianshang-business"  
  10. ユーザー名: root
  11. パスワード: 111111
  12. #dubbo 設定
  13. ダボ:
  14. スキャン:
  15. #パッケージ名は実際の状況に応じて記述する必要があります
  16. 基本パッケージ: org.project.dianshang.business
  17. プロトコル:
  18. ポート: 20882
  19. 名前: ダボ
  20. レジストリ:
  21. #飼育員登録センター住所
  22. アドレス: zookeeper://192.168.0.107:2181

5.5.2.サービス公開インターフェースと実装クラスを記述する

dianshang-business-api モジュールで、OrderApi インターフェイスを作成し、パラメーター オブジェクト OrderVo! を返します。

  1. パブリックインターフェースOrderApi {
  2.  
  3. /**
  4. * ユーザーIDでユーザーの注文情報を照会する
  5. * @param ユーザーID
  6. * @戻る 
  7. */
  8. リスト<OrderVo> queryOrderByUserId(String userId);
  9. }

このうち、OrderVo は次のようにシリアル化する必要があります。

  1. @データ
  2. @EqualsAndHashCode(callSuper = false )
  3. @Accessors(チェーン = true )
  4. パブリッククラス OrderVo はSerializable を実装します{
  5.  
  6. プライベート静的最終long serialVersionUID = 1L;
  7.  
  8. /**注文ID*/
  9. プライベート文字列 orderId;
  10.  
  11. /**注文番号*/
  12. プライベート文字列 orderNo;
  13.  
  14. /**注文金額*/
  15. プライベート BigDecimal orderPrice;
  16.  
  17. /**注文時間*/
  18. プライベート日付orderTime;
  19. }

dianshang-business-provider モジュールで、OrderApi インターフェース実装クラスを次のように記述します。

  1. @Service(インターフェースクラス = OrderApi.class)
  2. @成分
  3. パブリッククラス OrderProvider は OrderApi を実装します {
  4.  
  5. オートワイヤード
  6. プライベート OrderService orderService;
  7.  
  8. @オーバーライド
  9. パブリックリスト<OrderVo> queryOrderByUserId(String userId) {
  10. QueryWrapper< Order > queryWrapper = new QueryWrapper< Order >();
  11. queryWrapper.eq( "user_id" 、userId);
  12. リスト< Order > sourceList = orderService.list(queryWrapper);
  13. if(!CollectionUtils.isEmpty(sourceList)){
  14. リスト<OrderVo> voList = 新しいArrayList<>();
  15. 注文 順序: ソースリスト) {
  16. OrderVo vo = 新しい OrderVo();
  17. BeanUtils.copyProperties( order , vo);
  18. voList を追加します(vo);
  19. }
  20. voListを返します
  21. }
  22. 戻る ヌル;
  23. }
  24. }

この時点で、3 つのプロジェクトのサービス公開インターフェースが開発されました。次にリモート通話のやり方を書いてみます!

5.6 リモートコール

5.6.1.注文作成サービスを書く

dianshang-business-provider モジュールでは、注文作成インターフェースを記述する前に、まず次のように dianshang-business-api と dianshang-user-api に依存します。

  1. <! --製品サービスインターフェース公開API-->  
  2. <依存関係>
  3. <groupId>org.project.demo</groupId>
  4. <artifactId>dianshang-platform-api</artifactId>
  5. <バージョン>1.0.0</バージョン>
  6. </依存関係>
  7. <! --ユーザー サービス インターフェース公開 API-->  
  8. <依存関係>
  9. <groupId>org.project.demo</groupId>
  10. <artifactId>dianshang-ユーザー-api</artifactId>
  11. <バージョン>1.0.0</バージョン>
  12. </依存関係>

dianshang-business-provider モジュールで、注文作成サービスを次のように記述します。

  1. @レストコントローラ
  2. @RequestMapping( "/order" )
  3. パブリッククラスOrderController{
  4.  
  5. オートワイヤード
  6. プライベート OrderService orderService;
  7.  
  8. オートワイヤード
  9. プライベート OrderDetailService orderDetailService;
  10.  
  11. @参照(チェック= false )
  12. プライベートProductApi productApi;
  13.  
  14. @参照(チェック= false )
  15. プライベート UserApi userApi;
  16.  
  17. /**
  18. * 新しい
  19. */
  20. @Jwt無視
  21. @RequestMapping(値 = "/add" )
  22. パブリックブール値add (String productId,String userId){
  23. LocalAssert.isStringEmpty(productId, "製品IDは空にできません" );
  24. LocalAssert.isStringEmpty(userId, "ユーザーIDは空にできません" );
  25. プロダクト ID を productVo に渡します。
  26. LocalAssert.isObjectEmpty(productVo, "製品情報が見つかりません" );
  27. UserVo userVo = userApi.findUserById(userId);
  28. LocalAssert.isObjectEmpty(userVo, "ユーザー情報が見つかりません" );
  29. 注文  order = 新しいOrder ();
  30. 注文.setOrderId(IdGenerator.uuid());
  31. 注文.setOrderNo(System.currentTimeMillis() + "" );
  32. 注文.setOrderPrice(productVo.getProductPrice());
  33. オーダー.setUserId(userId);
  34. 注文.setOrderTime(新しい日付());
  35. orderService.save(注文);
  36.  
  37. OrderDetail orderDetail = new OrderDetail();
  38. orderDetail.setOrderDetailId(IdGenerator.uuid());
  39. orderDetail.setOrderId( order .getOrderId());
  40. orderDetail.setProductId(productId);
  41. 順序の詳細を設定します。
  42. orderDetailService.save(orderDetail);
  43. 戻る 真実;
  44. }
  45. }

@Reference アノテーションは org.apache.dubbo.config.annotation.Reference に属し、リモート依存サービスを示します。

パラメーター check = false は、サービスを開始するときにリモート サービスのステータス チェックが実行されないことを意味します。この設定の目的は、現在のサービスが起動に失敗するのを防ぐことです。たとえば、ユーザー センター プロジェクトは正常に起動できませんが、注文センターはユーザー センターに依存しています。 check = true の場合、注文センターの起動時にエラーが報告されます。

5.6.2.注文情報に関するユーザークエリを書く

同様に、dianshang-user-provider モジュールでは、ユーザーが注文情報を照会するためのインターフェースを記述する前に、まず dianshang-business-api と dianshang-user-api を次のように利用します。

  1. <依存関係>
  2. <groupId>org.project.demo</groupId>
  3. <artifactId>dianshang-ビジネス-api</artifactId>
  4. <バージョン>1.0.0</バージョン>
  5. </依存関係>
  6. <依存関係>
  7. <groupId>org.project.demo</groupId>
  8. <artifactId>dianshang-ユーザー-api</artifactId>
  9. <バージョン>1.0.0</バージョン>
  10. </依存関係>

dianshang-user-provider モジュールで、ユーザーが注文情報を照会するためのインターフェースを次のように記述します。

  1. @レストコントローラ
  2. @RequestMapping( "/ユーザー" )
  3. パブリッククラスUserController{
  4.  
  5. @参照(チェック= false )
  6. プライベート OrderApi orderApi;
  7.  
  8.  
  9. /**
  10. * ユーザーIDで注文情報を照会する
  11. * @param ユーザーID
  12. * @戻る 
  13. */
  14. @RequestMapping( "/リスト" )
  15. パブリックリスト<OrderVo> queryOrderByUserId(String userId){
  16. orderApi.queryOrderByUserId(userId)を返します
  17. }
  18. }

この時点で、リモート サービス コールは完了です。

6. サービステスト

プロジェクトをサーバーにデプロイする前に、ローカルでテストして、すべてのサービスがスムーズに実行できるかどうかを確認しましょう。

  • ユーザーセンターdianshang-user-providerを起動します

  • 製品センターdianshang-platform-providerの開始を継続

次に、注文センターdianshang-business-providerを起動します

最後に、サービス インターフェイスが期待どおりであるかどうかをテストしましょう。

ブラウザを開き、http://127.0.0.1:8082/order/add?productId=1&userId=1 と入力して、注文作成インターフェースをテストします。ページ操作結果が正常に表示されました!

もう一度データベースを見てみましょう。注文は生成されますか?

わかりました!データが入力されていることは明らかです、問題ありません!

ユーザー センターで注文クエリ インターフェイスをもう一度テストしてみましょう。http://127.0.0.1:8080/user/list?userId=1 と入力すると、ページの実行結果は次のようになります。

この時点で、ローカル サービス テストは基本的に合格です。

7. サーバーの展開

上記では、サービスの構築、開発、テストを紹介しましたが、サーバー側でどのように展開すればよいのでしょうか。

まず、各プロジェクトの application.yml ファイルを修正し、データソースアドレスと dubbo 登録センターアドレスをオンライン接続できるアドレスに変更し、dianshang ディレクトリ内の Maven ツールを使用して次のコマンドを実行し、プロジェクト全体をパッケージ化します。

  1. mvn クリーンインストール

Maven を使用してクリーン インストール コマンドを構成し、IDEA 環境でパッケージ化を実行することもできます。

各プロジェクトのターゲット ディレクトリから dianshang-user-provider.jar、dianshang-platform-provider.jar、dianshang-business-provider.jar をコピーします。

それぞれ対応するサーバーディレクトリにアップロードします。このサーバーは CentOS7 を使用しており、合計 4 台のサーバーがあり、そのうち 1 台は Zookeeper をデプロイし、他の 3 台は 3 つのマイクロサービス プロジェクトをデプロイします。

サーバーにログインし、次のコマンドを入力して、JDK がインストールされていることを確認してください。

  1. java バージョン

すべてのサーバーのファイアウォールを閉じて、ポートアクセスを許可してください。

  1. #ファイアウォールをオフにする
  2. systemctl 停止 ファイアウォールd.service
  3.  
  4. # 起動を無効にする
  5. systemctl は、firewalld.service を無効にします。
  • ユーザー センター サービスを起動し、ログ情報を service.log に出力します (仮想マシン IP: 192.168.0.108)
  1. nohup java -jar dianshang- user -provider.jar > service.log 2>&1 &
  • 製品センターサービスを起動し、ログ情報をservice.logに出力します(仮想マシンIP: 192.168.0.107)
  1. nohup java -jar dianshang-platform-provider.jar > service.log 2>&1 &
  • 注文センターサービスを起動し、ログ情報をservice.logに出力します(仮想マシンIP: 192.168.0.109)
  1. nohup java -jar dianshang-business-provider.jar > service.log 2>&1 &

ブラウザを開き、http://192.168.0.109:8082/order/add?productId=1&userId=1 と入力して、注文作成インターフェースをテストします。ページ操作結果が正常に表示されました!

ユーザー センターで注文クエリ インターフェイスをもう一度テストしてみましょう。http://192.168.0.108:8080/user/list?userId=1 と入力すると、ページの実行結果は次のようになります。

2つの情報が出力されていることがわかります。 2 番目の注文はテスト環境サーバーで生成され、1 番目の注文はローカル開発環境で生成されます。

この時点で、サーバーの展開は基本的に完了です。

実稼働環境の場合は、高可用性を確保するために複数の Zookeeper が必要になり、ビジネス サービスを展開するために少なくとも 2 台のサーバーが必要になり、負荷分散によってルーティングが必要になる場合があります。

8. 結論

記事全体はかなり長く、主に springboot + dubbo の統合に焦点を当てています。リモート サービス呼び出しは、従来の springmvc 開発と同じくらい簡単に、アノテーション開発を通じて実装できます。もちろん、dubbo サービス呼び出しは、後で紹介する XML 構成を通じて実装することもできます。

同時にサーバーの展開も紹介します。開発はシンプルですが、分散展開のため、サービスの高可用性をどのように確保するかが開発者にとって最優先事項となっていることがわかります。したがって、分散マイクロサービスの開発は簡単ですが、デプロイされたサービスの高可用性をどのように確保すればよいのでしょうか?運用とメンテナンスには多くの課題が伴います。

IX.参考文献

1. Apache - Dubbo - 公式ドキュメント

<<:  SpringBoot と Dubbo を統合して 5 分で分散サービスを構築

>>:  エッジコンピューティングがスマートシティに力を与える:機会と課題

推薦する

ブログにトラフィックを集める10の方法

コアヒント: ブログは一般的なウェブサイトとは大きく異なり、ブログのプロモーション方法もウェブサイト...

クラウドネイティブアプリケーションセキュリティの完全ガイド

翻訳者 |ジン・ヤンレビュー |チョンロウクラウドネイティブアプリケーションとは何ですか?クラウドネ...

高品質なWebサイトの夢を成功に導く、高品質なWebサイト制作の3つの秘訣(後編)

高品質サイトの作成に関するこれまでの 2 つの記事は、多くのウェブマスターから支持を得ています。本日...

マーケティング活動には深い思考と計画が必要です!

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています「ワールド...

ビジネスマーケティング担当者は、ウェブサイトをどのように活用してより多くの注文を獲得できるでしょうか?

従来の企業ウェブサイトは、主に企業に宣伝プラットフォームを提供するために使用され、主に企業の状況や製...

非常に強力な国内NewSQL分散データベースオープンソース

最近、Inspur テクノロジー チームが開発した NewSQL 分散データベース ZNBase が...

自分の家を掃除できないのに、どうやって世界を掃除できるでしょうか? ウェブサイトを最適化できないのに、どうやってランキングを上げることができるでしょうか?

新しいウェブマスターでも、古いウェブマスターでも、ウェブサイトを最適化するときに、多くの人は基本的に...

競合他社の詳細な調査は4つのポイントから始める必要があります

オンライン マーケティングと従来のマーケティングの最大の違いは、マーケティング環境 (またはキャリア...

InterServer: 75% オフ、年間 25 ドル、無制限の Web ホスティング、22 年の信頼のブランド

InterServer は今年、ブラックフライデーとサイバーマンデーの黄金期間に、最大 75% の割...

簡潔な分析:業界別B2Bウェブサイト運営方法

前回の記事「市場セグメンテーション: ウェブマスターの起業の春」で、業界のウェブサイト運営に関する記...

落下防止携帯電話に関するアップルの新特許:画面が自動的に保護シートを拡張

appleinsiderによると、米国特許商標庁は「電子機器のアクティブスクリーン保護」メカニズムと...

この記事では、WeChatミニプログラムのプロモーションチャネル16個を紹介します。

1. WeChat検索プロモーションエントリーチャネル、ミニプログラムSEOを実施(無料)パブリック...

#BlackFriday# #1Gbps 無制限トラフィック + 500G 防御# 33 ユーロ / E3-1240v6 / 16g DDR4 メモリ / 2x120gSSD + 2x1THDD

ブルガリアのホストプロバイダー BelCloud 傘下の独立サーバーブランド host.ag が特別...

アリババクラウドとオリンピック放送サービス会社OBSが共同で「オリンピック放送クラウド」を開始

オリンピック放送サービス(OBS)とアリババクラウドは9月19日、本日開幕した杭州雲奇カンファレンス...