ビッグデータ開発のプレスキル__Dubboxクイックスタート

1. Dubbox
1.1の概要SOAアーキテクチャとはSOA
は、サービス指向アーキテクチャの頭字語であり、サービス指向をサポートするアーキテクチャスタイルです。サービス、サービスベースの開発、およびサービス結果の観点から、サービス指向は考え方です。実際、SOAアーキテクチャは、インターネットプロジェクトの開発でより多く使用されています。
インターネットプロジェクトがSOAアーキテクチャを採用するのはなぜですか?インターネットの発展に伴い、ウェブサイトアプリケーションの規模は拡大を続けており、従来の垂直アプリケーションアーキテクチャでは対応できなくなっています。分散サービスアーキテクチャとモバイルコンピューティングアーキテクチャは不可欠であり、秩序ある進化を確実にするためにガバナンスシステムが緊急に必要とされています。アーキテクチャの。
開発アーキテクチャの進化を見てみましょう。以下に示すように:
ここに画像の説明を挿入します

単一のアプリケーションアーキテクチャ
Webサイトのトラフィックが非常に少ない場合、必要なアプリケーションは1つだけであり、すべての機能が一緒に展開されて、展開ノードとコストが削減されます。現時点では、データアクセスフレームワーク(ORM)は、追加、削除、変更、およびチェックの作業負荷を簡素化するための鍵です。
垂直アプリケーションアーキテクチャ
訪問数が徐々に増加すると、マシンに単一のアプリケーションを追加することによる加速はますます小さくなります。アプリケーションは、効率を向上させるためにいくつかの無関係なアプリケーションに分割されます。この時点で、フロントエンドページの開発を加速するために使用されるWebフレームワーク(MVC)が重要です。
分散サービスアーキテクチャ
垂直アプリケーションが増えると、アプリケーション間の相互作用は避けられません。コアビジネスは独立したサービスとして抽出され、徐々に安定したサービスセンターが形成されるため、フロントエンドアプリケーションは変化に迅速に対応できます。条件市場の需要。現時点では、ビジネスの再利用と統合を改善するための分散サービスフレームワーク(RPC)が重要です。
モバイルコンピューティングアーキテクチャ
サービスが増えると、容量の評価と小さなサービスリソースの浪費が徐々に現れます。このとき、クラスター容量をリアルタイムで管理するディスパッチセンターを追加する必要があります。アクセス圧力をかけ、クラスターの使用率を向上させます。現時点では、マシンの使用率を向上させるために使用されるリソーススケジューリングおよびガバナンスセンター(SOA)が重要です。
今日説明するDubboxは、モバイルコンピューティングアーキテクチャです。
1.2
Dubboxの概要Dubboxは分散サービスフレームワークです。その前身はAlibabaのオープンソースプロジェクトDubboで、国内のeコマースおよびインターネットプロジェクトで使用されていました。その後、Alibabaはプロジェクトのメンテナンスを停止し、Dangdangはに基づいて最適化されました。 Dubbo。元のDubboと区別するために、維持し続けるため、Dubboxという名前が付けられています。

Dubboxは、高性能で透過的なRPCリモートサービス呼び出しソリューションとSOAサービスガバナンスソリューションの提供に取り組んでいます。簡単に言えば、dubboxはサービスフレームワークです。分散要件がない場合、実際には不要です。配布された場合にのみ、dubboxのような分散サービスフレームワークの要件があり、本質的にはサービスコールです。率直に言って、リモートサービス呼び出しのための分散フレームワークです。
ここに画像の説明を挿入します

ノードの役割の説明:
プロバイダー:サービスを公開するサービスプロバイダー。
コンシューマー:リモートサービスを呼び出すサービスコンシューマー。
レジストリ:サービスの登録と検出のためのレジストリ。
監視:サービスの呼び出し順序と呼び出し時間をカウントする監視センター。
コンテナー:サービスはコンテナーを実行します。
呼び出し関係の説明:
0。サービスコンテナは、サービスプロバイダーの開始、読み込み、および実行を担当します。
1。サービスプロバイダーは、サービスを開始すると、そのサービスを登録センターに登録します。
2。サービスコンシューマーが開始すると、必要なサービスの登録センターにサブスクライブします。
3。登録センターは、サービスプロバイダーのアドレスのリストをコンシューマーに返します。変更があった場合、登録センターは、長い接続に基づいて
変更データをコンシューマーにプッシュします
4。サービスコンシューマーは、プロバイダーアドレスリストから、ソフト負荷分散アルゴリズムに基づいて、呼び出すプロバイダーを1つ選択し
、呼び出しが失敗した場合は、呼び出す別のプロバイダーを選択します。
5。サービスの利用者とプロバイダーは、通話数と通話時間をメモリに蓄積し、統計
データを1分ごとに監視センターに送信します
1.3 Dubboxの新機能(理解)
DubboxはDubboから進化し、元のDubbo構成方法を保持しています。ここでは、Dubboxの新機能を紹介します。
RESTスタイルのリモート呼び出し(HTTP + JSON / XML)のサポート:非常に成熟したJBoss RestEasyフレームワークに基づいて、RESTスタイル(HTTP + JSON / XML)のリモート呼び出しがdubboxに実装され、企業内の言語間の対話が大幅に簡素化されます。企業向けの外部OpenAPI、ワイヤレスAPI、さらにはAJAXサーバーの開発を大幅に簡素化します。実際、このREST呼び出しにより、Dubboxは今日特に人気のある「マイクロサービス」アーキテクチャの基本的なサポートを提供することもできます。さらに、REST呼び出しも比較的高いパフォーマンスを達成しています。ベンチマークテストでは、HTTP + JSONとDubbo2.xのデフォルトRPCプロトコル(つまり、TCP + Hessian2バイナリシリアル化)の間に約1.5倍のギャップしかありません。
KryoとFSTに基づく効率的なJavaシリアル化の実装をサポート:今日のより有名なKryoとFSTの高性能シリアル化ライブラリに基づいて、新しいシリアル化の実装がDubboのデフォルトのRPCプロトコルに追加され、そのシリアル化システムが最適化および調整されました。これはより重要です。DubboRPCのパフォーマンスが向上しました。
JacksonベースのJSONシリアル化をサポート:業界で最も広く使用されているJacksonシリアル化ライブラリに基づいて、新しいJSONシリアル化実装がDubboのデフォルトRPCプロトコルに追加されます。
組み込みTomcatに基づくHTTPリモーティングシステムのサポート:組み込みTomcatに基づくdubboのHTTPリモーティングシステム(つまりdubbo-remoting-http)を実装して、Dubboの古いバージョンの組み込みJettyを徐々に置き換えます。これにより、RESTなどのリモート性が大幅に向上します。 、およびServletAPIサポートを2.5から3.1にアップグレードします。(注:RESTを除いて、WebServices、Hessian、HTTP Invoker、およびdubboの他のプロトコルはすべてこのHTTPリモーティングシステムに基づいています)。
Springのアップグレード:dubboのSpringを2.xから最も一般的に使用される3.xバージョンにアップグレードして、バージョンの競合によって引き起こされる問題を減らします。
ZooKeeperクライアントのアップグレード:dubboのzookeeperクライアントを最新バージョンにアップグレードして、古いバージョンに含まれているバグを修正します。
完全にJavaコードに基づくDubbo構成をサポート:SpringベースのJava Configは、dubboを構成するための完全に非XMLの純粋なJavaコードの方法を実現します。
デモアプリケーションの調整:Dubboデモアプリケーションを一時的に調整および書き換えて、REST機能との新しさを示します。 Dubboプロトコル。シリアル化方法、Javaコードに基づくSpring構成など。
注:DubboxとDubbo 2.Xは互換性があり、Dubboの既存の機能と構成方法は変更されていません(Springおよびその他のバージョンのアップグレードを除く)
ここに画像の説明を挿入します
2。Dubbox開発環境の構築
2.1登録センターZookeeper 2.1.1Zookeeper
紹介
公式It zookeeperレジストリを使用することをお勧めします。登録センターは、ディレクトリサービスに相当するサービスアドレスの登録と検索を担当します。サービスプロバイダーとコンシューマーは起動時にのみ登録センターと対話し、登録センターはリクエストを転送しないため、プレッシャーは少なくなります。 。
Zookeeperは、Apacahe Hadoopのサブプロジェクトであり、変更プッシュをサポートするツリータイプのディレクトリサービスです。Dubboxサービスの登録センターとして適しています。高い産業力を備えており、実稼働環境で使用できます。
2.1.2 LinuxシステムでのZookeeperのインストール
インストール手順:
ステップ1:jdkをインストールする
ステップ2:zookeeper圧縮パッケージをLinuxシステムにアップロードします。
Alt + PでSFTPを入力し、put d:\ zookeeper-3.4.6.tar.gzと入力してアップロードします
ステップ3:圧縮パッケージを解凍します
tar-zxvf zookeeper-3.4.6.tar.gz
ステップ4:zookeeper -3.4.6ディレクトリに入り、データフォルダを作成します。
MKDIRデータ
ステップ5:zoo.cfgにconfディレクトリおよびリネームzoo_sample.cfgを入力し
、CDのconf
MV zoo_sample.cfg zoo.cfg
ステップ6:オープンzoo.cfgとデータ属性を変更します。DATADIR = /ルート/飼育係-3.4 6 / data
2.1.3 Zookeeper service start
binディレクトリに入り、サービスを開始して
コマンドを入力します。/zkServer.shstart
は、正常に開始されたことを示す次のコンテンツを出力します。

サービス入力コマンドをシャットダウンします
。/zkServer.shstop
出力次のプロンプトメッセージ

ステータスを確認します
。./zkServer.shstatus
起動ステータスの場合は、プロンプトを表示します。

開始されていない場合は、次のプロンプトを表示します。

2.2DubboxローカルJARパッケージのデプロイとインストール
DubboxjarパッケージはMavenの中央倉庫にデプロイされていません。Mavenの中央倉庫で、Dubboの最終バージョンが2.5.3であることがわかります。AlibabaがDubboチームを解散した後、Dangdang Netは引き続きこのプロジェクトを維持し、Dubboxに名前を変更しました。座標は変更されず、バージョンは変更されましたが、中央倉庫に送信されていません。
ここで、Dubboxjarパッケージをローカルウェアハウスに手動でインストールする必要があります。
最初にdubbo-2.8.4.jarパッケージをd:\ setupに配置し、次にコマンド
mvn install:install-file -Dfile = d:\ setup \ dubbo-2.8.4.jar -DgroupId = com.alibaba-を入力します。 DartifactId = dubbo -Dversion = 2.8.4 -Dpackaging = jar
2.3オフライン制約の構成
アドレス:
リンク
3. Dubbox3.1の使用を開始する
構成方法

3.1.1フレームワークの構築
(1)Mavenプロジェクト(POM)dubboxdemo-parentを作成し、pom.xmlに依存関係を導入します

<project 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">
  <modelVersion>4.0.0</modelVersion>
  <groupId>cn.itcast.dubboxdemo</groupId>
  <artifactId>dubboxdemo-parent</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>  
    <properties>		
		<spring.version>4.2.4.RELEASE</spring.version>
   </properties>    
	<dependencies>
		<!-- Spring -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-beans</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aspects</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jms</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context-support</artifactId>
			<version>${spring.version}</version>
		</dependency>	
		<!-- dubbo相关 -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>dubbo</artifactId>
			<version>2.8.4</version>			
		</dependency>
		<dependency>
			<groupId>org.apache.zookeeper</groupId>
			<artifactId>zookeeper</artifactId>
			<version>3.4.6</version>
		</dependency>
		<dependency>
			<groupId>com.github.sgroschupf</groupId>
			<artifactId>zkclient</artifactId>
			<version>0.1</version>
		</dependency>
		<dependency>
			<groupId>javassist</groupId>
			<artifactId>javassist</artifactId>
			<version>3.11.0.GA</version>
		</dependency>		
	</dependencies>
   <build>  
	  <plugins>
	      <plugin>  
	          <groupId>org.apache.maven.plugins</groupId>  
	          <artifactId>maven-compiler-plugin</artifactId>  
	          <version>2.3.2</version>  
	          <configuration>  
	              <source>1.7</source>  
	              <target>1.7</target>  
	          </configuration>  
	      </plugin>  	      
	  </plugins>  
    </build> 
</project>
(2)创建Maven模块(JAR)  dubboxdemo-interface  

(3)创建Maven模块(WAR) dubboxdemo-service  
     在pom.xml 中,添加tomcat7插件
 <build>  
	  <plugins>
	      <plugin>
				<groupId>org.apache.tomcat.maven</groupId>
				<artifactId>tomcat7-maven-plugin</artifactId>
				<configuration>
					<!-- 指定端口 -->
					<port>8081</port>
					<!-- 请求路径 -->
					<path>/</path>
				</configuration>
	  	  </plugin>
	  </plugins>  
    </build>
 在webapp下创建WEB-INF/web.xml 
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	version="2.5">	
	<!-- 加载spring容器 -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:applicationContext*.xml</param-value>
	</context-param>
	<listener>		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>	
</web-app>
(4)创建Maven模块(WAR) dubboxdemo-web   

pom.xmlで、tomcat7プラグインを追加します


```bash
 <build>  
	  <plugins>
	      <plugin>
				<groupId>org.apache.tomcat.maven</groupId>
				<artifactId>tomcat7-maven-plugin</artifactId>
				<configuration>
					<!-- 指定端口 -->
					<port>8082</port>
					<!-- 请求路径 -->
					<path>/</path>
				</configuration>
	  	  </plugin>
	  </plugins>  
    </build>
 在webapp下创建WEB-INF/web.xml 
 
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	version="2.5">	
   <!-- 解决post乱码 -->
	<filter>
		<filter-name>CharacterEncodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>utf-8</param-value>
		</init-param>
		<init-param>  
            <param-name>forceEncoding</param-name>  
            <param-value>true</param-value>  
        </init-param>  
	</filter>
	<filter-mapping>
		<filter-name>CharacterEncodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>	
  <servlet>
  	<servlet-name>springmvc</servlet-name>
  	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  	<!-- 指定加载的配置文件 ,通过参数contextConfigLocation加载-->
  	<init-param>
  		<param-name>contextConfigLocation</param-name>
  		<param-value>classpath:springmvc.xml</param-value>
  	</init-param>
  </servlet>  
  <servlet-mapping>
  	<servlet-name>springmvc</servlet-name>
  	<url-pattern>*.action</url-pattern>
  </servlet-mapping>
</web-app>

(5)构建依赖,让dubboxdemo-service 模块和dubboxdemo-web模块都依赖dubboxdemo-interface模块

3.1.2服务提供者
开发步骤:
(1)创建业务接口
在dubboxdemo-service 模块创建包cn.itcast.dubboxdemo.service,用于存放业务接口,创建接口UserService 

```bash
package cn.itcast.dubboxdemo.service;
/**
 * 业务接口
 * @author Administrator
 *
 */
public interface UserService {	
	public String getName();	
}
(2)创建业务实现类
创建包cn.itcast.dubboxdemo.service.impl ,用于存放业务实现类。创建业务实现类:
package cn.itcast.dubboxdemo.service.impl;
import org.springframework.stereotype.Service;
import cn.itcast.dubbodemo.service.UserService;
@Service
public class UserServiceImpl implements UserService {
	public String getName() {		
		return "itheima";
	}
}

(3)構成ファイル
Create applicationContext-service.xmlをsrc / main / resourcesの下に書き込みます。内容は次のとおりです。
<context:component-scan base-package = "cn.itcast.dubboxdemo.service.impl" />

< dubbo:application name =“ dubboxdemo-service” />
< dubbo :registry address =“ zookeeper://192.168.17.129:2181” />

< dubbo :service protocol =“ dubbo
timeout =“ 2000” connection =“ 100”
interface =“ cn.itcast.dubboxdemo.service.UserService "ref =" userServiceImpl "/>
(4)テスト実行
tomcat7:run
3.1.3サービスコンシューマー
開発手順:
(1)書き込みコントローラー

package cn.itcast.dubboxdemo.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import cn.itcast.dubbodemo.service.UserService;
@Controller
@RequestMapping("/user")
public class UserController {
    
    
	@Autowired
	private UserService userService;	
	@RequestMapping("/name")
	@ResponseBody
	public String showName(){
    
    
		return userService.getName();
	}		
}

(2)
Spring構成ファイルの書き込みsrc / main / resourcesの下にspringmvc.xmlを作成します

<context:component-scan base-package="cn.itcast.dubboxdemo.controller" />
<mvc:annotation-driven >
	<mvc:message-converters register-defaults="false">
		<bean class="org.springframework.http.converter.StringHttpMessageConverter">  
			<constructor-arg value="UTF-8" />
		</bean>  
	</mvc:message-converters>	
</mvc:annotation-driven>	
<!-- 引用dubbo 服务 -->
<dubbo:application name="dubboxdemo-web" />
<dubbo:registry address="zookeeper://192.168.17.129:2181"/>
<dubbo:reference interface="cn.itcast.dubboxdemo.service.UserService" id="userService" />

(3)
tomcat7:runをテスト実行
し、ブラウザにhttp:// localhost:8082 / user / name.actionと入力して、ブラウザの出力を確認します。3.2
アノテーション方法
3.2.1フレームワークが構築され
、設定方法は同じです。 (手順は省略されています)
3.2.2サービスプロバイダー
(1)は、ビジネス実装クラスを格納するためのパッケージcn.itcast.dubboxdemo.service.implを作成します。ビジネス実装クラスを作成します。

package cn.itcast.dubboxdemo.service.impl;
import com.alibaba.dubbo.config.annotation.Service;
import cn.itcast.dubboxdemo.service.UserService;
@Service
public class UserServiceImpl implements UserService {
    
    
	public String getName() {
    
    		
		return "itcast";
	}
}

注:サービスアノテーションは元のアノテーションとは異なります。com.alibabaパッケージでインポートする必要があります。
(2)src / main / resourcesの下にapplicationContext-service.xmlを作成します。内容は次のとおりです。
<dubbo:annotationパッケージ=“ cn.itcast.dubboxdemo.service” />
< dubbo :application name =“ dubboxdemo-service” />
< dubbo :registry address =“ zookeeper://192.168.17.129:2181” />
注:dubbo :annotationは@Serviceアノテーションをスキャンするために使用され、サービスを書き込む必要はありません。リリースされた構成。
3.2.3サービスコンシューマー
(1)書き込みコントローラー

package cn.itcast.dubboxdemo.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import cn.itcast.dubbodemo.service.UserService;
@Controller
@RequestMapping("/user")
public class UserController {
    
    
	@Autowired
	private UserService userService;	
	@RequestMapping("/name")
	@ResponseBody
	public String showName(){
    
    
		return userService.getName();
	}		
}

(2)
Spring構成ファイルの書き込みsrc / main / resourcesの下にspringmvc.xmlを作成します

	<!-- 引用dubbo 服务 -->
 <dubbo:annotation package="cn.itcast.dubboxdemo.controller" />  	
<dubbo:application name="dubboxdemo-web" />
<dubbo:registry address="zookeeper://192.168.17.129:2181"/>

(3)
tomcat7:runをテスト実行
し、ブラウザーにhttp:// localhost:8082 / user / name.actionと入力して、ブラウザーの出力結果を確認します。

おすすめ

転載: blog.csdn.net/xianyu120/article/details/114686416