概要: Dubbo は Alibaba のオープンソース分散サービス フレームワークです。その最大の特徴は、階層構造になっており、レイヤーを分離(または疎結合を最大化)できることです。サービスモデルの観点から見ると、Dubbo は非常にシンプルなモデルを採用しています。プロバイダーがサービスを提供するか、消費者がサービスを消費します。したがって、これに基づいて、サービスプロバイダー (Provider) とサービスコンシューマー (Consumer) の 2 つの役割を抽象化できます。 主に 4 つのモジュールを含む Dubbo の RPC 呼び出しプロセスを見てみましょう。 - レジストリ: サービス登録。通常、Zookeeper を登録センターとして使用します。
- プロバイダー: 特定のサービス実装を提供するサービスプロバイダー(プロデューサー)
- 消費者: 消費者、レジストリからサービスに加入する
- 監視: 監視センター、RPC 呼び出し回数と呼び出し時間の監視
上の図から、RPC サービス呼び出しプロセス全体は主に次のようになっていることがわかります。 - プロデューサーはサービスレジストリにサービスを公開する
- 消費者はサービスレジストリ内のサービスに加入する
- 消費者は登録されたサービスを呼び出す
1. プロジェクトの構築 開発環境には主に以下の側面が含まれます。 プロジェクトは 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 アドレスがあります)。 - <依存関係>
- <グループID> io.dubbo.springboot</グループID>
- <artifactId>スプリングブートスターター- dubbo </artifactId>
- <バージョン> 1.0.0</バージョン>
- </依存関係>
- <依存関係>
- <グループID> org.apache.zookeeper</グループID>
- <artifactId>動物園の飼育係 </artifactId>
- <バージョン> 3.4.6</バージョン>
- <除外事項>
- <除外>
- <グループID> org.slf4j</グループID>
- <アーティファクトID> slf4j - log4j12 </アーティファクトID>
- </除外>
- <除外>
- <グループID> log4j</グループID>
- <アーティファクトID> log4j</アーティファクトID>
- </除外>
- </除外>
- </依存関係>
2.2 設定ファイル 最下層の開発には Spring-Boot を使用しているため、Spring-Boot がもたらす利点をうまく活用して、Application.properties ファイルで Dubbo サービスを直接構成することができます。 - ## Dubbo サービスプロバイダーの構成
- spring.dubbo.application.name =プロバイダー--サービス名
- spring.dubbo.registry.address = zookeeper ://127.0.0.1:2181 -- 登録センターのアドレス
- spring.dubbo.protocol.name =dubbo -- dubbo プロトコル
- spring.dubbo.protocol.port = 20880
- spring.dubbo.scan = com .jaycekon.dubbo.service -- 公開する必要があるサービスインターフェースを宣言します
自動構成に Spring-Boot を使用しない場合は、次の構成 xml 構成を参照できます。 - <? xml バージョン= "1.0" エンコーディング= "UTF-8" ?>
- <豆 xmlns = "http://www.springframework.org/schema/beans"
- xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
- xmlns:dubbo = "http://code.alibabatech.com/schema/dubbo"
- xsi:schemaLocation ="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
- http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd" >
-
- <ダボ:アプリケーション 名前= "プロバイダー" />
-
- <ダボ:レジストリ プロトコル= "動物園の飼育係" アドレス= "127.0.0.1" チェック= "false" />
-
- <ダボ:プロトコル 名前= "ダボ" ポート= "-1" ディスパッチャー= "すべて" チェック= "false" />
- <ダボ:プロバイダー タイムアウト= "10000" スレッド= "10" スレッドプール= "固定" ロードバランス= "ラウンドロビン" />
-
- <ダボ:サービス インターフェース= "com.jaycekon.dubbo.service" ref = "userService" /> </豆>
2.3.サービス提供 サービス提供には、主にサービスの公開とサービスの実装の 2 つの部分が含まれます。 公開サービス: これは開発で通常使用するインターフェースです。ここでは、主にユーザーを保存するためのメソッドを含む UserService インターフェイスを作成します。 - com.jaycekon.dubbo.domain.User をインポートします。
- /**
- * 2017/9/19にJaycekonによって作成されました。
- */
- パブリックインターフェースUserService{
- ユーザー saveUser(ユーザー user);
- }
サービス実装: 通常のサービスと同様に、サービス実装ではインターフェースを実装します。特別なのは、ここで Dubbo の @Service アノテーションを使用する必要があることです。より実践的なSpringbootコンテンツについては、Java Zhiyinパブリックアカウントで「springboot aggregation」と返信してください。 - com.alibaba.dubbo.config.annotation.Service をインポートします。
- com.jaycekon.dubbo.domain.User をインポートします。
- com.jaycekon.dubbo.service.UserService をインポートします。
- /**
- * 2017/9/19にJaycekonによって作成されました。
- */
- @サービス
- パブリッククラス UserServiceImpl は UserService を実装します {
- @オーバーライド
- パブリックユーザー saveUser(ユーザー ユーザー) {
- ユーザーIDを設定します(1);
- System.out.println(user.toString());
- ユーザーを返します。
- }
- }
2.4 全体構造 Dubbo のサービス プロバイダーは開発されており、非常にシンプルです。全体的なディレクトリ構造は次のとおりです。 3. 消費者 3.1、pom.xml 消費者の相対的な依存関係は生産者のそれと一致しています。 - <? xml バージョン= "1.0" エンコーディング= "UTF-8" ?>
- <プロジェクト xmlns = "http://maven.apache.org/POM/4.0.0" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" >
- <モデルバージョン> 4.0.0</モデルバージョン>
- <グループID> com.jaycekon</グループID>
- <artifactId>スプリングブートコンシューマー</artifactId>
- <バージョン> 0.0.1-SNAPSHOT </バージョン>
- <パッケージ>瓶</パッケージ>
- <名前> spring-boot-consumer </名前>
- < description > Spring Boot のデモ プロジェクト</ description >
- <親>
- <グループID> org.springframework.boot</グループID>
- <artifactId> spring -boot-スターター-親</artifactId>
- <バージョン> 1.5.7.RELEASE </バージョン>
- <相対パス/>
- </親>
- <プロパティ>
- < project.build.sourceEncoding > UTF-8 </ project.build.sourceEncoding >
- < project.reporting.outputEncoding > UTF-8 </ project.reporting.outputEncoding >
- < java.version > 1.8 < /java.version >
- </プロパティ>
- <依存関係>
- <依存関係>
- <グループID> org.springframework.boot</グループID>
- <artifactId>スプリング-ブートスターター-ウェブ</artifactId>
- </依存関係>
- <依存関係>
- <グループID> org.springframework.boot</グループID>
- <artifactId> spring -boot-スターター-テスト</artifactId>
- <スコープ>テスト</スコープ>
- </依存関係>
-
- <依存関係>
- <グループID> io.dubbo.springboot</グループID>
- <artifactId>スプリングブートスターター- dubbo </artifactId>
- <バージョン> 1.0.0</バージョン>
- </依存関係>
- <依存関係>
- <グループID> org.apache.zookeeper</グループID>
- <artifactId>動物園の飼育係 </artifactId>
- <バージョン> 3.4.6</バージョン>
- <除外事項>
- <除外>
- <グループID> org.slf4j</グループID>
- <アーティファクトID> slf4j - log4j12 </アーティファクトID>
- </除外>
- <除外>
- <グループID> log4j</グループID>
- <アーティファクトID> log4j</アーティファクトID>
- </除外>
- </除外>
- </依存関係>
-
- <依存関係>
- <グループID> org.springframework</グループID>
- <artifactId>スプリングロード</artifactId>
- <バージョン> 1.2.3.RELEASE </バージョン>
- </依存関係>
- <依存関係>
- <グループID> org.projectlombok</グループID>
- <artifactId>ロンボク</artifactId>
- <バージョン> 1.16.18</バージョン>
- <スコープ>提供</スコープ>
- </依存関係>
- </依存関係>
- <ビルド>
- <プラグイン>
- <プラグイン>
- <グループID> org.springframework.boot</グループID>
- <artifactId> spring-boot - maven -プラグイン</artifactId>
- </プラグイン>
- </プラグイン>
- </ビルド>
- </プロジェクト>
3.2 設定ファイル 設定ファイルはプロデューサーとは少し異なります。 - ## サーバープロジェクトとのポート競合を避ける
- サーバーポート= 8081
- ## Dubboサービスコンシューマー構成
- spring.dubbo.application.name =コンシューマー
- spring.dubbo.registry.address =動物園の飼育係 ://127.0.0.1:2181
- spring.dubbo.scan = com.jaycekon.dubbo.service
XML ベースの構成: - <? xml バージョン= "1.0" エンコーディング= "UTF-8" ?>
- <豆 xmlns = "http://www.springframework.org/schema/beans"
- xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
- xmlns:dubbo = "http://code.alibabatech.com/schema/dubbo"
- xsi:schemaLocation ="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
- http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd" >
-
- <ダボ:アプリケーション 名前= "プロバイダー" />
-
- <ダボ:レジストリ プロトコル= "動物園の飼育係" アドレス= "${dubbo.registry.address}" チェック= "false" />
-
- <ダボ:プロトコル 名前= "ダボ" ポート= "-1" ディスパッチャー= "すべて" チェック= "false" />
- <ダボ:プロバイダー タイムアウト= "10000" スレッド= "10" スレッドプール= "固定" ロードバランス= "ラウンドロビン" />
-
- <ダボ:サービス インターフェース= "com.jaycekon.dubbo.service" ref = "userService" />
- </豆>
3.3 サービスの実装 ここで、登録サービスで関連サービスを呼び出す必要がある場合は、関連するインターフェースを実装する必要があります。 - com.jaycekon.dubbo.domain.User をインポートします。
- /**
- * 2017/9/19にJaycekonによって作成されました。
- */
- パブリックインターフェースUserService{
- ユーザー saveUser(ユーザー user);
- }
たとえば、ここではプロデューサーで saveUser(User user) メソッドを使用する必要があり、インターフェースを作成し、それを呼び出すときに @Reference アノテーションを使用してそれを参照する必要があります。 - com.alibaba.dubbo.config.annotation.Reference をインポートします。
- com.jaycekon.dubbo.domain.City をインポートします。
- com.jaycekon.dubbo.domain.User をインポートします。
- org.springframework.stereotype.Component をインポートします。
- /**
- * ダボ市は消費者にサービスを提供
- * < p >
- * 2017 年 9 月 20 日に Jaycekon によって作成されました。
- */
- @成分
- パブリッククラス CityDubboConsumerService {
- @参照
- シティダボサービス シティダボサービス;
- @参照
- ユーザーサービス ユーザーサービス;
- パブリックボイドprintCity() {
- 文字列cityName = "広州" ;
- 都市city = cityDubboService .findCityByName(cityName);
- System.out.println(city.toString());
- }
- パブリックユーザー saveUser() {
- ユーザーuser = new User();
- user.setUsername("jaycekon")
- .setPassword("jaycekong824");
- 戻り userService.saveUser(user);
- }
- }
3.4 サービスコール 最後に、RESTful インターフェースを実装し、ユーザーが呼び出せるように提供する必要があります。 - com.jaycekon.dubbo.service.CityDubboConsumerService をインポートします。
- org.springframework.beans.factory.annotation.Autowired をインポートします。
- org.springframework.web.bind.annotation.RequestMapping をインポートします。
- org.springframework.web.bind.annotation.RestController をインポートします。
- /**
- * 2017/9/19にJaycekonによって作成されました。
- */
- @レストコントローラ
- パブリッククラスUserController{
- オートワイヤード
- プライベート CityDubboConsumerService サービス。
- @RequestMapping("/save")
- パブリックオブジェクト saveUser() {
- service.saveUser() を返します。
- }
- }
3.5 ディレクトリ構造 IV.結論 このブログは主にブロガーがSpring-bootを学習する際のまとめです。一連の比較を経て、Dubbo と Spring-Cloud の間にはまだギャップがあると感じています。サービス提供面でもコミュニティ活動面でも、Spring-Cloud は依然として強力です。しかし、Dubboは社内で使用されているため、まだ学習する必要があります。今後はSpring-Cloudを勉強して、いろいろな項目に分けてみようと思います。 GitHubアドレス https://github.com/jaycekon/SpringBoot |