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

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

概要:

Dubbo は Alibaba のオープンソース分散サービス フレームワークです。その最大の特徴は、階層構造になっており、レイヤーを分離(または疎結合を最大化)できることです。サービスモデルの観点から見ると、Dubbo は非常にシンプルなモデルを採用しています。プロバイダーがサービスを提供するか、消費者がサービスを消費します。したがって、これに基づいて、サービスプロバイダー (Provider) とサービスコンシューマー (Consumer) の 2 つの役割を抽象化できます。

主に 4 つのモジュールを含む Dubbo の RPC 呼び出しプロセスを見てみましょう。

  • レジストリ: サービス登録。通常、Zookeeper を登録センターとして使用します。
  • プロバイダー: 特定のサービス実装を提供するサービスプロバイダー(プロデューサー)
  • 消費者: 消費者、レジストリからサービスに加入する
  • 監視: 監視センター、RPC 呼び出し回数と呼び出し時間の監視

上の図から、RPC サービス呼び出しプロセス全体は主に次のようになっていることがわかります。

  • プロデューサーはサービスレジストリにサービスを公開する
  • 消費者はサービスレジストリ内のサービスに加入する
  • 消費者は登録されたサービスを呼び出す

1. プロジェクトの構築

開発環境には主に以下の側面が含まれます。

  • スプリングブート
  • 8 の
  • ダボ
  • 動物園の飼育員

プロジェクトは http://start.spring.io/ を通じて構築され、Web プロジェクトをすばやく構築します。具体的な操作については、

http://www.cnblogs.com/jaycekon/p/7562688.html

Dubbo はサービス登録センターを使用する必要があるため、ここではサービス登録センターとして Zookeeper を使用します。具体的なインストールと設定については、

http://www.cnblogs.com/jaycekon/p/7553909.html

基本的な環境が決定した後、プロジェクトのディレクトリ構造は次のようになります。

上の図に示すように、プロジェクトは主に 2 つのモジュールに分かれています。1 つはプロデューサーの spring-boot-dubbo で、もう 1 つは spring-boot-consumer です。

プロジェクト全体の構造は非常にシンプルで、Spring-Boot の特性に沿っており、シンプルで便利です。プロジェクト全体の構造を段階的に分析してみましょう

2. プロデューサー

2.1.ポム.xml

プロジェクトの依存関係は主に基本的な Spring-Boot-Web 依存関係を使用し、その後 Dubbo と Zookeeper の追加の依存関係を導入する必要があります (詳細な依存関係については、ソース コードを参照してください。ブログ投稿の下部にプロジェクトの Github アドレスがあります)。

  1. <依存関係>    
  2. <グループID> io.dubbo.springboot</グループID>    
  3. <artifactId>スプリングブートスターター- dubbo </artifactId>    
  4. <バージョン> 1.0.0</バージョン>    
  5. </依存関係>    
  6. <依存関係>    
  7. <グループID> org.apache.zookeeper</グループID>    
  8. <artifactId>動物園の飼育係 </artifactId>    
  9. <バージョン> 3.4.6</バージョン>    
  10. <除外事項>    
  11. <除外>    
  12. <グループID> org.slf4j</グループID>    
  13. <アーティファクトID> slf4j - log4j12 </アーティファクトID>    
  14. </除外>    
  15. <除外>    
  16. <グループID> log4j</グループID>    
  17. <アーティファクトID> log4j</アーティファクトID>    
  18. </除外>    
  19. </除外>    
  20. </依存関係>  

2.2 設定ファイル

最下層の開発には Spring-Boot を使用しているため、Spring-Boot がもたらす利点をうまく活用して、Application.properties ファイルで Dubbo サービスを直接構成することができます。

  1. ## Dubbo サービスプロバイダーの構成
  2. spring.dubbo.application.name =プロバイダー--サービス名 
  3. spring.dubbo.registry.address = zookeeper ://127.0.0.1:2181 -- 登録センターのアドレス 
  4. spring.dubbo.protocol.name =dubbo -- dubbo プロトコル
  5. spring.dubbo.protocol.port = 20880    
  6. spring.dubbo.scan = com .jaycekon.dubbo.service -- 公開する必要があるサービスインターフェースを宣言します

自動構成に Spring-Boot を使用しない場合は、次の構成 xml 構成を参照できます。

  1. <? xml  バージョン= "1.0"  エンコーディング= "UTF-8" ?>  
  2. <  xmlns = "http://www.springframework.org/schema/beans"    
  3. xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"    
  4. xmlns:dubbo = "http://code.alibabatech.com/schema/dubbo"  
  5. xsi:schemaLocation ="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd  
  6. http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd" >    
  7. <!-- プロバイダー アプリケーション情報 -->    
  8. <ダボ:アプリケーション 名前= "プロバイダー"    />  
  9. <!-- 登録センターのサービスアドレス -->    
  10. <ダボ:レジストリ  プロトコル= "動物園の飼育係"  アドレス= "127.0.0.1"   チェック= "false"   />    
  11. <!-- dubbo プロトコルを使用 -->    
  12. <ダボ:プロトコル 名前= "ダボ"  ポート= "-1"  ディスパッチャー= "すべて"  チェック= "false"   />    
  13. <ダボ:プロバイダー タイムアウト= "10000"   スレッド= "10"  スレッドプール= "固定"    ロードバランス= "ラウンドロビン" />    
  14. <!-- 公開する必要があるサービス インターフェイスを宣言します -->    
  15. <ダボ:サービス インターフェース= "com.jaycekon.dubbo.service"   ref = "userService" />   </>  

2.3.サービス提供

サービス提供には、主にサービスの公開とサービスの実装の 2 つの部分が含まれます。

公開サービス: これは開発で通常使用するインターフェースです。ここでは、主にユーザーを保存するためのメソッドを含む UserService インターフェイスを作成します。

  1. com.jaycekon.dubbo.domain.User をインポートします。  
  2. /**  
  3. * 2017/9/19にJaycekonによって作成されました。  
  4. */  
  5. パブリックインターフェースUserService{  
  6. ユーザー saveUser(ユーザー user);
  7. }

サービス実装: 通常のサービスと同様に、サービス実装ではインターフェースを実装します。特別なのは、ここで Dubbo の @Service アノテーションを使用する必要があることです。より実践的なSpringbootコンテンツについては、Java Zhiyinパブリックアカウントで「springboot aggregation」と返信してください。

  1. com.alibaba.dubbo.config.annotation.Service をインポートします。  
  2. com.jaycekon.dubbo.domain.User をインポートします。  
  3. com.jaycekon.dubbo.service.UserService をインポートします。  
  4. /**  
  5. * 2017/9/19にJaycekonによって作成されました。  
  6. */  
  7. @サービス 
  8. パブリッククラス UserServiceImpl は UserService を実装します {  
  9. @オーバーライド
  10. パブリックユーザー saveUser(ユーザー ユーザー) {  
  11. ユーザーIDを設定します(1);  
  12. System.out.println(user.toString());  
  13. ユーザーを返します。  
  14. }  
  15. }

2.4 全体構造

Dubbo のサービス プロバイダーは開発されており、非常にシンプルです。全体的なディレクトリ構造は次のとおりです。

3. 消費者

3.1、pom.xml

消費者の相対的な依存関係は生産者のそれと一致しています。

  1. <? xml  バージョン= "1.0"  エンコーディング= "UTF-8" ?>    
  2. <プロジェクト  xmlns = "http://maven.apache.org/POM/4.0.0"   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"    
  3. xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" >    
  4. <モデルバージョン> 4.0.0</モデルバージョン>    
  5. <グループID> com.jaycekon</グループID>    
  6. <artifactId>スプリングブートコンシューマー</artifactId>    
  7. <バージョン> 0.0.1-SNAPSHOT </バージョン>    
  8. <パッケージ></パッケージ>    
  9. <名前> spring-boot-consumer </名前>    
  10. < description > Spring Boot のデモ プロジェクト</ description >    
  11. <>    
  12. <グループID> org.springframework.boot</グループID>    
  13. <artifactId> spring -boot-スターター-</artifactId>    
  14. <バージョン> 1.5.7.RELEASE </バージョン>    
  15. <相対パス/>   <!-- リポジトリから親を検索 -->    
  16. </>    
  17. <プロパティ>  
  18. < project.build.sourceEncoding > UTF-8 </ project.build.sourceEncoding >    
  19. < project.reporting.outputEncoding > UTF-8 </ project.reporting.outputEncoding >    
  20. < java.version > 1.8 < /java.version >    
  21. </プロパティ>    
  22. <依存関係>    
  23. <依存関係>    
  24. <グループID> org.springframework.boot</グループID>    
  25. <artifactId>スプリング-ブートスターター-ウェブ</artifactId>    
  26. </依存関係>    
  27. <依存関係>    
  28. <グループID> org.springframework.boot</グループID>    
  29. <artifactId> spring -boot-スターター-テスト</artifactId>    
  30. <スコープ>テスト</スコープ>    
  31. </依存関係>    
  32. <!-- Spring Boot Dubbo の依存関係 -->    
  33. <依存関係>    
  34. <グループID> io.dubbo.springboot</グループID>    
  35. <artifactId>スプリングブートスターター- dubbo </artifactId>    
  36. <バージョン> 1.0.0</バージョン>  
  37. </依存関係>    
  38. <依存関係>  
  39. <グループID> org.apache.zookeeper</グループID>    
  40. <artifactId>動物園の飼育係 </artifactId>    
  41. <バージョン> 3.4.6</バージョン>    
  42. <除外事項>  
  43. <除外>    
  44. <グループID> org.slf4j</グループID>    
  45. <アーティファクトID> slf4j - log4j12 </アーティファクトID>    
  46. </除外>    
  47. <除外>    
  48. <グループID> log4j</グループID>    
  49. <アーティファクトID> log4j</アーティファクトID>    
  50. </除外>    
  51. </除外>    
  52. </依存関係>    
  53. <!-- mvn spring-boot:ホットデプロイメントの起動を実行します -->  
  54. <依存関係>    
  55. <グループID> org.springframework</グループID>    
  56. <artifactId>スプリングロード</artifactId>    
  57. <バージョン> 1.2.3.RELEASE </バージョン>    
  58. </依存関係>    
  59. <依存関係>    
  60. <グループID> org.projectlombok</グループID>    
  61. <artifactId>ロンボク</artifactId>    
  62. <バージョン> 1.16.18</バージョン>    
  63. <スコープ>提供</スコープ>  
  64. </依存関係>    
  65. </依存関係>    
  66. <ビルド>    
  67. <プラグイン>    
  68. <プラグイン>    
  69. <グループID> org.springframework.boot</グループID>    
  70. <artifactId> spring-boot - maven -プラグイン</artifactId>    
  71. </プラグイン>    
  72. </プラグイン>    
  73. </ビルド>    
  74. </プロジェクト>  

3.2 設定ファイル

設定ファイルはプロデューサーとは少し異なります。

  1. ## サーバープロジェクトとのポート競合を避ける 
  2. サーバーポート= 8081  
  3. ## Dubboサービスコンシューマー構成 
  4. spring.dubbo.application.name =コンシューマー   
  5. spring.dubbo.registry.address =動物園の飼育係 ://127.0.0.1:2181  
  6. spring.dubbo.scan = com.jaycekon.dubbo.service

XML ベースの構成:

  1. <? xml  バージョン= "1.0"  エンコーディング= "UTF-8" ?>    
  2. <  xmlns = "http://www.springframework.org/schema/beans"    
  3. xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"    
  4. xmlns:dubbo = "http://code.alibabatech.com/schema/dubbo"    
  5. xsi:schemaLocation ="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd  
  6. http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd" >    
  7. <!-- プロバイダー アプリケーション情報 -->    
  8. <ダボ:アプリケーション 名前= "プロバイダー"    />    
  9. <!-- 登録センターのサービスアドレス -->    
  10. <ダボ:レジストリ  プロトコル= "動物園の飼育係"  アドレス= "${dubbo.registry.address}"   チェック= "false"   />    
  11. <!-- dubbo プロトコルを使用 -->    
  12. <ダボ:プロトコル 名前= "ダボ"  ポート= "-1"  ディスパッチャー= "すべて"  チェック= "false"   />    
  13. <ダボ:プロバイダー タイムアウト= "10000"   スレッド= "10"  スレッドプール= "固定"    ロードバランス= "ラウンドロビン" />    
  14. <!-- 公開する必要があるサービス インターフェイスを宣言します -->  
  15. <ダボ:サービス インターフェース= "com.jaycekon.dubbo.service"   ref = "userService" />    
  16. </>  

3.3 サービスの実装

ここで、登録サービスで関連サービスを呼び出す必要がある場合は、関連するインターフェースを実装する必要があります。

  1. com.jaycekon.dubbo.domain.User をインポートします。  
  2. /**  
  3. * 2017/9/19にJaycekonによって作成されました。  
  4. */  
  5. パブリックインターフェースUserService{  
  6. ユーザー saveUser(ユーザー user);  
  7. }

たとえば、ここではプロデューサーで saveUser(User user) メソッドを使用する必要があり、インターフェースを作成し、それを呼び出すときに @Reference アノテーションを使用してそれを参照する必要があります。

  1. com.alibaba.dubbo.config.annotation.Reference をインポートします。  
  2. com.jaycekon.dubbo.domain.City をインポートします。  
  3. com.jaycekon.dubbo.domain.User をインポートします。
  4. org.springframework.stereotype.Component をインポートします。  
  5. /**  
  6. * ダボ市は消費者にサービスを提供 
  7. * < p >    
  8. * 2017 年 9 月 20 日に Jaycekon によって作成されました。  
  9. */  
  10. @成分 
  11. パブリッククラス CityDubboConsumerService {  
  12. @参照 
  13. シティダボサービス シティダボサービス;  
  14. @参照 
  15. ユーザーサービス ユーザーサービス;  
  16. パブリックボイドprintCity() {  
  17. 文字列cityName = "広州" ;  
  18. 都市city = cityDubboService .findCityByName(cityName);  
  19. System.out.println(city.toString());  
  20. }  
  21. パブリックユーザー saveUser() {  
  22. ユーザーuser = new User();  
  23. user.setUsername("jaycekon")
  24. .setPassword("jaycekong824");  
  25. 戻り userService.saveUser(user);  
  26. }  
  27. }

3.4 サービスコール

最後に、RESTful インターフェースを実装し、ユーザーが呼び出せるように提供する必要があります。

  1. com.jaycekon.dubbo.service.CityDubboConsumerService をインポートします。  
  2. org.springframework.beans.factory.annotation.Autowired をインポートします。  
  3. org.springframework.web.bind.annotation.RequestMapping をインポートします。  
  4. org.springframework.web.bind.annotation.RestController をインポートします。  
  5. /**  
  6. * 2017/9/19にJaycekonによって作成されました。  
  7. */  
  8. @レストコントローラ 
  9. パブリッククラスUserController{  
  10. オートワイヤード 
  11. プライベート CityDubboConsumerService サービス。  
  12. @RequestMapping("/save")
  13. パブリックオブジェクト saveUser() {
  14. service.saveUser() を返します。  
  15. }  
  16. }

3.5 ディレクトリ構造

IV.結論

このブログは主にブロガーがSpring-bootを学習する際のまとめです。一連の比較を経て、Dubbo と Spring-Cloud の間にはまだギャップがあると感じています。サービス提供面でもコミュニティ活動面でも、Spring-Cloud は依然として強力です。しかし、Dubboは社内で使用されているため、まだ学習する必要があります。今後はSpring-Cloudを勉強して、いろいろな項目に分けてみようと思います。

GitHubアドレス

https://github.com/jaycekon/SpringBoot

<<:  初の商品販売ライブ放送は500万人以上の視聴者を集め、天一クラウドは企業のクラウド移行の新たなトレンドを生み出した。

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

推薦する

GIF で Distributed Raft を説明する

[[378468]] 1. いかだの概要Raft アルゴリズムは、分散システム開発に適したコンセンサ...

Google がクラウド コンピューティングの人材をターゲットにしているのはなぜですか?

2020年の初めは非常に混乱したものでした。自然災害も新型コロナウイルス肺炎も人々に暗い影を落として...

クラウドコンピューティング業界の観点から見た同国の「新インフラ」

国家の「二会期」はちょうど終了しました。 IT 実務家として、今回提案された「新しいインフラ」に期待...

4Kスマートテレビ市場への参入におけるLeTVの華麗な運営を詳細に分析

4Kスマートテレビ市場への参入におけるLeTVの華麗な運営を詳細に分析今日のインターネット時代におい...

fliphost-4$/Kvm/4コア/1gメモリ/7g SSD/800gトラフィック/Gポート/ロサンゼルス

「推奨: fliphost-16$year/128m メモリ/5gSSD/500g トラフィック/G...

簡単な議論:第三・第四都市におけるポータルフォーラムの運営方法

昨夜、Lu Songsong のウェブマスターの友情と闘争のグループで、誰かが第 3 および第 4 ...

コメントを通じて独自のアプリの ASO 最適化に貢献するにはどうすればよいでしょうか?

ASO 最適化には、主にキーワード カバレッジやコメント最適化などの従来の手段が含まれます。これまで...

hostus-2g メモリ KVM/40g ハードディスク/2T トラフィック/2IP/G ポート/月額 7 ドル

今回、Hostus はプロモーション用に、コストパフォーマンスに優れた 2 つの VPS を用意しま...

国内インターネット情報プラットフォームの4つの段階についての簡単な説明

国内のインターネットでは、アリババが電子商取引を、テンセントがソーシャルネットワーキングを代表し、一...

XcodeGhost事件は成人における最も深刻な情報セキュリティ事件かもしれない

商業セキュリティ評価機関やアプリケーションソフトウェア開発者は、iOS システムが XcodeGho...

タオバオをうまく運営するには?私の個人的な意見

「失敗の理由は何千もあるが、成功の理由は似ている」ということわざがあります。したがって、成功事例を分...

Weiboプロモーションとトラフィック生成のためのテクニックと戦略

ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービスWeibo は、Weix...

ramnode-2月は全VPSが5.8%割引/IPv4が1つ追加

Ramnode の VPS は、生涯 48% の割引を提供しています。アムステルダム、シアトル、アト...

Baidu が www 付きのホームページではなく www なしのホームページを最初に掲載する理由の分析

みなさんこんにちは。私は SEO 初心者です。最近忙しくて、長い間 SEO の知識を皆さんと共有して...

コンテンツマーケティングをうまく行いたいなら、次の3つのポイントを知っておく必要があります

ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービスこの本では、著者がコンテ...