dubbox功能演示

dubbox功能演示

經過如下內容介紹dubbox框架。java

  • dubbo是什麼
  • dubbox又是什麼
  • dubbo能作什麼
  • dubbo框架設計
  • dubbo服務調用過程

1. dubbo是什麼

Dubbo是一個分佈式服務框架,致力於提供高性能和透明化的RPC遠程服務調用方案,以及SOA服務治理方案。 其核心部分包含:git

  • 遠程通信: 提供對多種基於長鏈接的NIO框架抽象封裝,包括多種線程模型,序列化,以及「請求-響應」模式的信息交換方式。
  • 集羣容錯: 提供基於接口方法的透明遠程過程調用,包括多協議支持,以及軟負載均衡,失敗容錯,地址路由,動態配置等集羣支持。
  • 自動發現: 基於註冊中心目錄服務,使服務消費方能動態的查找服務提供方,使地址透明,使服務提供方能夠平滑增長或減小機器。

2. dubbox又是什麼

Dubbox now means Dubbo eXtensions. If you know java, javax and dubbo, you know what dubbox is :)。噹噹網根據自身的需求,爲Dubbo實現了一些新的功能,並將其命名爲Dubbox(即Dubbo eXtensions)。升級和提供的功能列表:github

  • 支持REST風格遠程調用(HTTP + JSON/XML)spring

    輸入圖片說明

  • 支持基於Kryo和FST的Java高效序列化實現apache

  • 支持基於Jackson的JSON序列化json

  • 支持基於嵌入式Tomcat的HTTP remoting體系api

  • 升級Spring瀏覽器

  • 升級ZooKeeper客戶端tomcat

  • 支持徹底基於Java代碼的Dubbo配置服務器

  • ......

3. dubbo能作什麼

  • 透明化的遠程方法調用,就像調用本地方法同樣調用遠程方法,只需簡單配置,沒有任何API侵入。
  • 軟負載均衡及容錯機制,可在內網替代F5等硬件負載均衡器,下降成本,減小單點。
  • 服務自動註冊與發現,再也不須要寫死服務提供方地址,註冊中心基於接口名查詢服務提供者的IP地址,而且可以平滑添加或刪除服務提供者。

4. dubbo框架設計

總體設計圖: 輸入圖片說明

各層說明:

  • 服務接口層(Service):該層是與實際業務邏輯相關的,根據服務提供方和服務消費方的業務設計對應的接口和實現。
  • config,配置層,對外配置接口,以ServiceConfig, ReferenceConfig爲中心,能夠直接new配置類,也能夠經過spring解析配置生成配置類
  • proxy,服務代理層,服務接口透明代理,生成服務的客戶端Stub和服務器端Skeleton,以ServiceProxy爲中心,擴展接口爲ProxyFactory
  • registry,註冊中心層,封裝服務地址的註冊與發現,以服務URL爲中心,擴展接口爲RegistryFactory, Registry, RegistryService
  • cluster,路由層,封裝多個提供者的路由及負載均衡,並橋接註冊中心,以Invoker爲中心,擴展接口爲Cluster, Directory, Router, LoadBalance
  • monitor,監控層,RPC調用次數和調用時間監控,以Statistics爲中心,擴展接口爲MonitorFactory, Monitor, MonitorService
  • protocol,遠程調用層,封將RPC調用,以Invocation, Result爲中心,擴展接口爲Protocol, Invoker, Exporter
  • exchange,信息交換層,封裝請求響應模式,同步轉異步,以Request, Response爲中心,擴展接口爲Exchanger, ExchangeChannel, ExchangeClient, ExchangeServer
  • transport,網絡傳輸層,抽象mina和netty爲統一接口,以Message爲中心,擴展接口爲Channel, Transporter, Client, Server, Codec
  • serialize,數據序列化層,可複用的一些工具,擴展接口爲Serialization, ObjectInput, ObjectOutput, ThreadPool

5. dubbo服務調用過程

服務提供方和服務消費方之間的調用關係,如圖所示: 輸入圖片說明

圖例說明:

  • 圖中小方塊Protocol, Cluster, Proxy, Service, Container, Registry, Monitor表明層或模塊,藍色的表示與業務有交互,綠色的表示只對Dubbo內部交互。
  • 圖中背景方塊Consumer, Provider, Registry, Monitor表明部署邏輯拓普節點。
  • 圖中藍色虛線爲初始化時調用,紅色虛線爲運行時異步調用,紅色實線爲運行時同步調用。
  • 圖中只包含RPC的層,不包含Remoting的層,Remoting總體都隱含在Protocol中。

6.應用配置項使用說明

6.1. 應用配置項的介紹

應用配置項主要使用:

<dubbo:application/>

應用配置,用於配置當前應用信息,無論該應用是提供者仍是消費者。配置項以下圖: dubbo application 一個簡單的實例:

<dubbo:application name="demo-provider" 
    				   owner="programmer" 
    				   organization="dubbox"
    				   version="1.0.0"
    				   environment="product"
    				   compiler="javassist"
    				   logger="slf4j"
    				   />

注意:若是同一個應用部署多個實例建議name配置項變動,如: name="demo-provider1" ,name="demo-provider2" ,......,name="demo-providern"

服務啓動後查看註冊中心(稍後介紹)註冊服務地址(格式有所調整)爲:

com.alibaba.dubbo.demo.user.UserService?
anyhost=true&
application=demo-provider&
application.version=1.0.0&
compiler=javassist&
dubbo=2.0.0&
environment=product&
generic=false&
group=xmlConfig&
interface=com.alibaba.dubbo.demo.user.UserService&
logger=slf4j&
methods=getUser,registerUser&
optimizer=com.alibaba.dubbo.demo.SerializationOptimizerImpl&
organization=dubbox&
owner=programmer&
pid=6116&
serialization=kryo&
side=provider
×tamp=1477272042362

6.2. 註冊中心配置

應用配置項主要使用:

<dubbo:registry  />

註冊中心配置;配置項以下圖: registry 一個簡單的實例:

<dubbo:registry address="zookeeper://127.0.0.1:2181"/>

全部的服務就註冊到zookeeper上了。 使用時須要在provider和consumer中增長zookeeper客戶端jar包依賴:

<dependency>
    <groupId>org.apache.zookeeper</groupId>
    <artifactId>zookeeper</artifactId>
    <version>3.4.6</version>
</dependency>

支持zkclient和curator兩種Zookeeper客戶端實現:從2.2.0版本開始缺省爲zkclient實現。須要添加一下依賴:

<dependency>
    <groupId>com.github.sgroschupf</groupId>
    <artifactId>zkclient</artifactId>
    <version>0.1</version>
</dependency>

從2.3.0版本開始支持可選curator實現。若是須要改成curator實現,請配置:

<dubbo:registry ... client="curator" />

或:

dubbo.registry.client=curator

或:

zookeeper://10.20.153.10:2181?client=curator

需依賴:

<dependency>
    <groupId>com.netflix.curator</groupId>
    <artifactId>curator-framework</artifactId>
    <version>2.5.0</version>
</dependency>

Zookeeper單機配置:

<dubbo:registry address="zookeeper://10.20.153.10:2181" />

or:

<dubbo:registry protocol="zookeeper" address="10.20.153.10:2181" />

Zookeeper集羣配置:

<dubbo:registry address="zookeeper://10.20.153.10:2181?backup=10.20.153.11:2181,10.20.153.12:2181" />

Or:

<dubbo:registry protocol="zookeeper" address="10.20.153.10:2181,10.20.153.11:2181,10.20.153.12:2181" />

6.3. 服務提供者協議配置

服務提供者應用配置項主要使用:

<dubbo:protocol />

服務提供者協議配置,說明:若是須要支持多協議,能夠聲明多個dubbo:protocol標籤,並在dubbo:service中經過protocol屬性指定使用的協議。配置項以下圖: 輸入圖片說明 輸入圖片說明

一個簡單的實例:

<dubbo:protocol name="dubbo" serialization="kryo" optimizer="com.alibaba.dubbo.demo.SerializationOptimizerImpl"/>

另外一個:

<dubbo:protocol name="rest" port="8888" threads="500" contextpath="services" server="tomcat" accepts="500"
                    extension="com.alibaba.dubbo.demo.extension.TraceInterceptor,
                    com.alibaba.dubbo.demo.extension.TraceFilter,
                    com.alibaba.dubbo.demo.extension.ClientTraceFilter,
                    com.alibaba.dubbo.demo.extension.DynamicTraceBinding,
                    com.alibaba.dubbo.demo.extension.CustomExceptionMapper,
                    com.alibaba.dubbo.rpc.protocol.rest.support.LoggingFilter"/>

注意:配置項port建議顯示配置、最好將配置添加到配置文件中(dubbo.perties)中。部署集羣多個實例時必定要修改port端口,避免端口重複引發服務啓動失敗。

6.4. 服務提供者缺省值配置

服務提供者配置項主要使用:

<dubbo:provider/>

說明:該標籤爲dubbo:servicedubbo:protocol標籤的缺省值設置。 部分配置項以下圖: provider 配置項均可可選的、所以在使用過程當中能夠不配置。

6.5. 服務提供者缺省值配置

服務提供者配置項主要使用:

<dubbo:consumer/>

說明:該標籤爲dubbo:reference標籤的缺省值設置。 部分配置項以下圖: consumer 配置項均可可選的、所以在使用過程當中能夠不配置。

6.6 監控配置項

服務監控配置項配置以下圖: 輸入圖片說明

前提須要部署監控程序。監控程序部署在服務治理、監控使用說明中有介紹。

6.7 服務提供者暴露服務配置

服務提供者暴露服務配置部分配置項: 輸入圖片說明 兩個必須的配置項:

  • interface
  • ref 一個簡單的實例:
<dubbo:service interface="com.xdja.hysyb.rpc.api.user.IUserService" 
    			   ref="userService"  
    			   protocol="dubbo" 
    			   /><!-- group="xmlConfig" -->

	<dubbo:service interface="com.xdja.hysyb.rpc.api.user.facade.IUserRestService" 
				   ref="userRestService"  
				   protocol="rest" 
				   validation="true"/>

前期能夠先了解簡單配置、高級特性等了解完畢後再作使用。

6.8 服務消費者引用服務配置

服務消費者引用服務配置部分配置項: 輸入圖片說明

注意兩個必填項目:

  • id 引用服務名稱惟一標識
  • interface 引用服務接口類

一個簡單的實例:

<dubbo:reference id="userRestService"  check="true"
    				 interface="com.xdja.hysyb.rpc.api.user.facade.IUserRestService"/>
    <dubbo:reference id="userService"  check="true"
    				 interface="com.xdja.hysyb.rpc.api.user.IUserService" />

6.9 其餘一些配置項

其餘一些配置項請參考: http://dubbo.io/User+Guide-zh.htm#UserGuide-zh-%E9%85%8D%E7%BD%AE%E5%8F%82%E8%80%83%E6%89%8B%E5%86%8C

7.簡單實例配置使用說明

源代碼結構以下圖:

輸入圖片說明

項目名稱 介紹
soa-api 接口定義(定義服務的接口)
soa-parent 生產服務、消費服務程序父項目結構
soa-consumer 消費服務端項目
soa-provider 生產服務端項目

7.1 啓動生產者服務

soa-provider 項目的測試包下找到以下類: test.com.xdja.hysyb.rpc.api.impl.user.DemoProvider 直接運行main方法。 若是出現如下:

信息: Starting ProtocolHandler ["http-nio-8888"]
[2016-11-04 16:37:09] Dubbo service server started!

啓動成功在本機8888端口。

7.2 測試消費端服務

由於生產端發佈的有rest服務和dubbo服務、rest服務能夠直接經過瀏覽器模擬測試:

7.2.1 rest協議服務測試

瀏覽器直接輸入:

http://localhost:8888/services/users/1.json

運行效果圖: 輸入圖片說明

7.2.2 dubbo協議服務測試

soa-consumer項目的測試包下找到以下類: test.com.xdja.hysyb.rpc.demo.user.DemoConsumer 運行在控制檯查看效果以下:

[ConstraintViolationImpl{interpolatedMessage='User ID must be greater than 1', propertyPath=getUserArgument0, rootBeanClass=class com.xdja.hysyb.rpc.api.user.facade.IUserRestService_GetUserParameter, messageTemplate='User ID must be greater than 1'}]
Client request filter invoked
[04/11/16 04:45:42:042 CST] main  INFO support.LoggingFilter:  [DUBBO] The HTTP headers are: 
Accept: application/json;charset=UTF-8
Accept-Encoding: gzip, deflate
Content-Type: application/json
, dubbo version: 2.8.4, current host: 192.168.18.113
Writer interceptor invoked
Dynamic writer interceptor invoked
[04/11/16 04:45:42:042 CST] main  INFO support.LoggingFilter:  [DUBBO] The contents of response body is: 
{"id":1,"username":"zhangyq"}
, dubbo version: 2.8.4, current host: 192.168.18.113
相關文章
相關標籤/搜索