概述
Dubbo的配置項非常多,但所有配置項分為三大類,服務發現、服務治理、性能調優。服務發現類的配置項,表示該配置項用于服務的注冊與發現,目的是讓消費方找到提供方;服務治理類的配置項,表示該配置項用于治理服務間的關系,或為開發測試提供便利條件;對于性能調優類的配置項,則表示該配置項用于調優性能,不同的選項對性能會產生影響。所有配置最終都將轉換為URL表示,并由服務提供方生成,經注冊中心傳遞給消費方,各屬性對應URL的參數。不同的配置項,有不同的使用場景,掌握配置項的含義和使用場景,是用好Dubbo框架的基本功。
Dubbo目前可供配置的配置項或者xml標簽一共有13種,涉及可配置的屬性210個,有些配置項和屬性存在優先級和缺省關系,也并不是每個配置項都是必須的。下面是這13種配置項及其常用屬性的配置說明。
dubbo:service
服務提供者暴露服務配置,用來配置一個服務,在服務提供者端進行配置。對應的配置類是org.Apache.dubbo.config.ServiceConfig。比如下面的配置,定義和曝露了一個用戶服務userService。
interface:服務接口名,一般使用接口的完整類名,必填項
ref:服務接口實現類bean的id引用,必填項
<bean id="userService" class="com.fandou.coffee.provider.user.UserServiceImpl"/>
<dubbo:service interface="com.fandou.coffee.api.user.UserService" ref="userService"/>
dubbo:reference
服務消費者引用服務配置,在服務消費者端配置,用來定義引用一個遠程的服務。對應的配置類是org.apache.dubbo.config.ReferenceConfig。
id:服務引用BeanId,必填項
interface:服務接口名,一般使用接口的完整類名,與dubbo:service中的interface保持一致,必填項
check:檢查引用的服務是否存在,屬于服務治理類的屬性,默認為true,如果注冊中心不存在應用的服務,將報錯拋出異常。可選項。
<dubbo:reference id="userService" check="false" interface="com.fandou.coffee.api.user.UserService"/>
dubbo:protocol
服務提供者協議配置,服務提供者端或服務消費者端均可配置。對應的配置類是org.apache.dubbo.config.ProtocolConfig。同時,如果需要支持多協議,可以聲明多個dubbo:protocol標簽,并在dubbo:service中通過protocol屬性指定使用的協議,多個協議id用逗號分隔。
id:協議BeanId,可以在dubbo:service的protocol引用此id,如果id不填,缺省和name屬性值一樣,重復則在name后加序號。可選項。
name:協議名稱,如果不配置dubbo:protocol,將使用dubbo:provider中的設置,默認dubbo。必填。
port:協議通信端口號,可選項,缺省值20880.
<dubbo:protocol name="dubbo" port="20880"/>
dubbo:registry
注冊中心配置,Dubbo目前主要支持zookeeper以及redis等。對應的配置類是org.apache.dubbo.config.RegistryConfig。同時如果有多個不同的注冊中心,可以聲明多個dubbo:registry標簽,并在dubbo:service或dubbo:reference的registry屬性指定使用的注冊中心。
id:注冊中心引用BeanId,可選項,可以在dubbo:service的registry或dubbo:reference的registry中引用此ID。
address:注冊中心服務器地址,格式為protocol://ip:port,必填項。如果地址沒有端口缺省為9090,同一集群內的多個地址用逗號分隔,如:protocol://ip:port,protocol://ip:port,不同集群的注冊中心,請配置多個dubbo:registry標簽。
protocol:注冊中心地址協議,支持dubbo, multicast, zookeeper, redis, consul, sofa, etcd, nacos等協議,可選項,缺省值為dubbo。
port:注冊中心缺省端口,當address沒有帶端口時使用此端口作為缺省值,可選項,缺省值為9090。
username:登錄注冊中心用戶名,如果注冊中心不需要驗證可不填。可選項。
password:登錄注冊中心密碼,如果注冊中心不需要驗證可不填。可選項。
transport:網絡傳輸方式,可選mina,netty。可選項,缺省值為netty。
下面的配置,使用address屬性,指定了使用的協議、注冊中心服務器地址以及端口號
<dubbo:registry address="zookeeper://192.168.8.156:2181"/>
dubbo:Application
應用信息配置,以及qos等。對應的配置類是org.apache.dubbo.config.ApplicationConfig。
name:當前應用名稱,用于注冊中心計算應用間依賴關系,注意:消費者和提供者應用名不要一樣,此參數不是匹配條件,當前項目叫什么名字就填什么,和提供者消費者角色無關。必填項。
logger:日志輸出方式,可選:slf4j,jcl,log4j,log4j2,jdk,缺省值為slf4j。
下面的配置定義了一個用戶服務提供者應用,并使用slf4j作為日志輸出。
<dubbo:application name="user-service-provider.xml" logger="slf4j"/>
下面配置了一個服務消費者應用,同時還配置了qos屬性
<!-- 服務消費方應用名稱,方便用于依賴跟蹤 -->
<dubbo:application name="user-service-consumer" logger="slf4j">
<dubbo:parameter key="qos.enable" value="true" />
<dubbo:parameter key="qos.accept.foreign.ip" value="false" />
<!-- 配置QOS端口,由于服務提供方端已經使用了默認的22222,這里需要改用以下,否則在同一個機器同時將出現端口占用問題 -->
<dubbo:parameter key="qos.port" value="33333" />
</dubbo:application>
dubbo:monitor
監控中心配置,可選配置項。對應的配置類是org.apache.dubbo.config.MonitorConfig。此配配置項只有兩個屬性
protocol:監控中心協議,如果為protocol="registry",表示從注冊中心發現監控中心地址,否則直連監控中心。可選項,缺省值為dubbo。
address:直連監控中心服務器地址,比如address="10.20.130.230:12080"。可選項,缺省值為N/A。
dubbo:module
模塊信息配置,可選配置項。對應的配置類是org.apache.dubbo.config.ModuleConfig。
name:當前模塊名稱,用于注冊中心計算模塊間依賴關系。
下面的配置定義了一個user模塊:
當前模塊名稱,用于注冊中心計算模塊間依賴關系。
dubbo:provider
服務提供者缺省值配置,可選配置項,常用于配置缺省值。對應的配置類是org.apache.dubbo.config.ProviderConfig。同時該標簽為dubbo:service和dubbo:protocol標簽的缺省值設置。
dubbo:consumer
服務消費者缺省值配置,可選配置項,常用于配置缺省值。配置類是org.apache.dubbo.config.ConsumerConfig 。同時該標簽為dubbo:reference標簽的缺省值設置。
dubbo:method
方法級配置,可選配置項。對應的配置類是org.apache.dubbo.config.MethodConfig。同時該標簽為dubbo:service或dubbo:reference的子標簽,用于控制到方法級。
dubbo:argument
方法參數配置,可選配置項。對應的配置類: org.apache.dubbo.config.ArgumentConfig。該標簽為 dubbo:method 的子標簽,用于方法參數的特征描述,比如:
<dubbo:method name="findXxx" timeout="3000" retries="2">
<dubbo:argument index="0" callback="true" />
</dubbo:method>
dubbo:parameter
選項參數配置,可選配置項。對應的配置類是JAVA.util.Map。同時該標簽為dubbo:protocol或dubbo:service或dubbo:provider>或dubbo:reference或dubbo:consumer的子標簽,用于配置自定義參數,該配置項將作為擴展點設置自定義參數使用。
dubbo:config-center
配置中心,可選配置項。對應的配置類是org.apache.dubbo.config.ConfigCenterConfig。
總結
不同的配置項,有不同的使用場景,掌握配置項的含義和使用場景,是用好Dubbo框架的基本功。