Dubbo配置(二) -- 協議與註冊中心
阿新 • • 發佈:2019-12-31
github測試Demo專案地址:github.com/HopeAndStar…
一:概述
繼上篇文章講解如何進行服務釋出與消費之後本文將講解服務釋出協議配置項<dubbo:protocol>與註冊中心配置項<dubbo:registry>。宣告一點就是Dubbo支援多種通訊協議,同時也支援多種服務註冊中心。所以本文僅僅是講解這兩個標籤的配置,具體每種協議釋出或者是註冊中心使用後面有文章進行介紹
二:服務協議 dubbo:protocol
服務協議配置中最核心的當屬name屬性指定協議型別,當然配置關聯的id屬性、port屬性以及效能調優的threadpool執行緒池、serialization序列化方式等也比較重要
2.1 重要基礎配置
屬性 | 作用 | 預設值 | 描述 |
---|---|---|---|
id | 指定id,供service、reference使用 | 預設service、reference使用所有配置協議 | <dubbo:servicer>與<dubbo:reference>中都有protocol配置屬性,分別代表服務釋出通訊協議與指定消費通訊協議型別。其中屬性值預設為所有<dubbo:protocol>配置通訊協議,如果指定則可以在屬性值中填入<dubbo:protocol>配置項id屬性值,以", "隔開 |
name | 指定協議名稱 | 必填項 | 用以指定協議配置協議型別,比如dubbo代表Dubbo協議、http代表Http協議、rest代表Rest風格協議等 |
port | 釋出埠 | dubbo預設20880、rmi預設1099、http和hessian預設80,-1則自動分配未佔用埠 | Dubbo消費服務除了在註冊中心進行消費外,reference還能通過url屬性進行直連消費,這時候的port就是必須的在url中指定的 |
register | 是否釋出 | true | service中可以通過register指定是否釋出服務,protocol中也可以指定該型別協議服務是否釋出 |
accesslog | 訪問日誌輸出 | 可以配置boolean型別標識開啟關閉,也可以配置日誌檔案路徑,直接將訪問日誌輸出到日誌檔案中 | |
server | 協議的伺服器端實現 | dubbo協議預設為netty,http協議預設為servlet | 例如在配置Rest協議的時候使用tomcat、jetty等 |
2.2 效能調優配置
屬性 | 作用 | 預設值 | 描述 |
---|---|---|---|
threadpool | 指定執行緒池型別 | fixed | 可選型別有預設fixed載入時建立執行緒不會刪除一直持有,以及cached空閒一分鐘後刪除執行緒,需要時再建立 |
threads | 執行緒池固定大小 | 200 | 瞭解執行緒池組成的同學應該知道這個配置的含義,不知道的自己去學執行緒池 |
queues | 執行緒池佇列大小 | 0 | 核心執行緒佔用完時會線上程池佇列等待,官網建議不進行配置,直接不等待失敗後重試其它服務機器 |
iothreads | IO執行緒池大小 | CPU + 1 | Dubbo有兩個執行緒池,上面說的threadspool是一個,剩下的就是這個IO執行緒池。可以通過dispatcher分配請求處理 |
payload | 服務響應資料包大小 | 8M | 不同協議有不同特點,這個屬性可以限制不同場景服務下的資料傳輸容量 |
serialization | 協議序列化方式 | dubbo協議預設為hessian2,rmi協議預設為java,http協議預設為json | 後面會有章節講協議序列化 |
dispatcher | 協議訊息派發方式 | dubbo協議預設為all | 具體分派方式如下無序列表所示 |
charset | 序列化編碼 | UTF-8 | 沒有啥特殊要求吧,個人理解在國內而言 |
-
all
:所有訊息都派發到執行緒池,包括請求,響應,連線事件,斷開事件,心跳等 -
direct
: 所有訊息都不派發到執行緒池,全部在 IO 執行緒上直接執行 -
message
: 只有請求響應訊息派發到執行緒池,其它連線斷開事件,心跳等訊息,直接在 IO 執行緒上執行 -
execution
:只有請求訊息派發到執行緒池,不含響應,響應和其它連線斷開事件,心跳等訊息,直接在 IO 執行緒上執行 -
connection
:在 IO 執行緒上,將連線斷開事件放入佇列,有序逐個執行,其它訊息派發到執行緒池
2.3 個人想法
協議這塊的配置除了id、name、port常規配置外。比較常用的調優就倆方面,執行緒池相關的threadpoool、threads、iothreads、dispatcher以及協議序列化方式serialization。其餘的配置個人理解基本不會太常規使用,可能我見識少,有這方面經驗的朋友可以交流下
三:註冊中心 dubbo:registry
Dubbo支援向多種以及多個註冊中心釋出服務,註冊中心的配置就是用標籤<dubbo:registry>進行配置
3.1 重要基礎配置
屬性 | 作用 | 預設值 | 描述 |
---|---|---|---|
id | 指定id,供service、reference使用 | 預設service、reference向所有註冊中心釋出服務 | <dubbo:servicer>與<dubbo:reference>中都有registry配置屬性,分別代表服務釋出註冊中心與指定消費註冊中心地址。其中屬性值預設為所有<dubbo:registry>配置註冊中心,如果指定則可以在屬性值中填入<dubbo:registry>配置項id屬性值,以", "隔開 |
address | 註冊中心地址 | 如果一個配置項代表多個註冊中心,需要使用","進行隔開,註冊中心協議型別可以在屬性中配置,當然也可以通過protocol屬性配置 | |
protocol | 註冊中心通訊協議 | dubbo | zookeeper註冊中心的zookeeper、Redis的redis等等 |
port | 註冊中心預設埠 | 9090 | 當配置address沒有攜帶註冊中心埠時使用本埠 |
username | 註冊中心使用者名稱 | 如果註冊中心不需要驗證則可以不寫 | |
password | 註冊中心密碼 | 註冊中心不需要驗證不寫 | |
file | 註冊中心地址以及服務提供者列表快取檔案,當服務重啟時將根據此檔案重啟。不同註冊中心不能使用同一檔案 | ||
check | 註冊中心存在檢查 | true | 當註冊中心不存在時是否進行報錯 |
register | 是否註冊 | true | 設定為false將只訂閱不註冊 |
subscrible | 是否訂閱 | true | 設定為false將只註冊不訂閱 |
group | 註冊中心分組 | 向同一註冊中心可以分組註冊,不同分組之間的服務不能相互呼叫也不會相互影響 |
- 最核心的配置為address,其中的註冊中心協議protocol可以設定,註冊中心埠port可以設定
- id屬性供給service與reference消費
- group可以對註冊中心分組
- 註冊中心驗證採用username與password兩個屬性配置
- 當然如果想要限定只註冊不訂閱通過subscrible,只訂閱不註冊可以同屬register