連線個數:單連線
連線方式:長連線
傳輸協議:TCP
傳輸方式:NIO非同步傳輸
序列化:Hessian二進位制序列化
適用範圍:傳入傳出引數資料包較小(建議小於100K),消費者比提供者個數多,單一消費者無法壓滿提供者,儘量不要用dubbo協議傳輸大檔案或超大字串。 適用場景:常規遠端服務方法呼叫
Dubbo預設協議採用單一長連線和NIO非同步通訊,適合於小資料量大併發的服務呼叫,以及服務消費者機器數遠大於服務提供者機器數的情況。
缺點:
Dubbo預設協議不適合傳送大資料量的服務,比如傳檔案,傳視訊等,除非請求量很低。
事件處理執行緒說明
如果事件處理的邏輯能迅速完成,並且不會發起新的IO請求,比如只是在記憶體中記個標識,則直接在IO執行緒上處理更快,因為減少了執行緒池排程。
但如果事件處理邏輯較慢,或者需要發起新的IO請求,比如需要查詢資料庫,則必須派發到執行緒池,否則IO執行緒阻塞,將導致不能接收其它請求。
如果用IO執行緒處理事件,又在事件處理過程中發起新的IO請求,比如在連線事件中發起登入請求,會報“可能引發死鎖”異常,但不會真死鎖。
Dispatcher
all 所有訊息都派發到執行緒池,包括請求,響應,連線事件,斷開事件,心跳等。
direct 所有訊息都不派發到執行緒池,全部在IO執行緒上直接執行。
message 只有請求響應訊息派發到執行緒池,其它連線斷開事件,心跳等訊息,直接在IO執行緒上執行。
execution 只請求訊息派發到執行緒池,不含響應,響應和其它連線斷開事件,心跳等訊息,直接在IO執行緒上執行。
connection 在IO執行緒上,將連線、斷開事件放入佇列,有序逐個執行,其它訊息派發到執行緒池。
ThreadPool
fixed 固定大小執行緒池,啟動時建立執行緒,不關閉,一直持有。(預設)
cached 快取執行緒池,空閒一分鐘自動刪除,需要時重建。
limited 可伸縮執行緒池,但池中的執行緒數只會增長不會收縮。(為避免收縮時突然來了大流量引起的效能問題)。
配置如:
<dubbo:protocol name="dubbo" dispatcher="all" threadpool="fixed" threads="100"/>
屬性 | 對應URL引數 | 型別 | 是否必填 | 預設值 | 作用 | 描述 | 相容性 |
---|---|---|---|---|---|---|---|
id | string | 可選 | dubbo | 配置關聯 | 協議BeanId,可以在<dubbo:service protocol="">中引用此ID,如果ID不填,預設和name屬性值一樣,重複則在name後加序號。 | 2.0.5以上版本 | |
name | <protocol> | string | 必填 | dubbo | 效能調優 | 協議名稱 | 2.0.5以上版本 |
port | <port> | int | 可選 |
dubbo協議預設埠為20880,rmi協議預設埠為1099, http和hessian協議預設埠為80 Dubbo 2.4.0+,分配的埠在協議預設埠的基礎上增長,確保埠段可控。 |
服務發現 | 服務埠 | 2.0.5以上版本 |
host | <host> | string | 可選 | 自動查詢本機IP | 服務發現 | -服務主機名,多網路卡選擇或指定VIP及域名時使用,為空則自動查詢本機IP,-建議不要配置,讓Dubbo自動獲取本機IP | 2.0.5以上版本 |
threadpool | threadpool | string | 可選 | fixed | 效能調優 | 執行緒池型別,可選:fixed/cached | 2.0.5以上版本 |
threads | threads | int | 可選 | 100 | 效能調優 | 服務執行緒池大小(固定大小) | 2.0.5以上版本 |
iothreads | threads | int | 可選 | cpu個數+1 | 效能調優 | io執行緒池大小(固定大小) | 2.0.5以上版本 |
accepts | accepts | int | 可選 | 0 | 效能調優 | 服務提供方最大可接受連線數 | 2.0.5以上版本 |
payload | payload | int | 可選 | 88388608(=8M) | 效能調優 | 請求及響應資料包大小限制,單位:位元組 | 2.0.5以上版本 |
codec | codec | string | 可選 | dubbo | 效能調優 | 協議編碼方式 | 2.0.5以上版本 |
serialization | serialization | string | 可選 | dubbo協議預設為hessian2,rmi協議預設為java,http協議預設為json | 效能調優 | 協議序列化方式,當協議支援多種序列化方式時使用,比如:dubbo協議的dubbo,hessian2,java,compactedjava,以及http協議的json等 | 2.0.5以上版本 |
accesslog | accesslog | string/boolean | 可選 | 服務治理 | 設為true,將向logger中輸出訪問日誌,也可填寫訪問日誌檔案路徑,直接把訪問日誌輸出到指定檔案 | 2.0.5以上版本 | |
path | <path> | string | 可選 | 服務發現 | 提供者上下文路徑,為服務path的字首 | 2.0.5以上版本 | |
transporter | transporter | string | 可選 | dubbo協議預設為netty | 效能調優 | 協議的服務端和客戶端實現型別,比如:dubbo協議的mina,netty等,可以分拆為server和client配置 | 2.0.5以上版本 |
server | server | string | 可選 | dubbo協議預設為netty,http協議預設為servlet | 效能調優 | 協議的伺服器端實現型別,比如:dubbo協議的mina,netty等,http協議的jetty,servlet等 | 2.0.5以上版本 |
client | client | string | 可選 | dubbo協議預設為netty | 效能調優 | 協議的客戶端實現型別,比如:dubbo協議的mina,netty等 | 2.0.5以上版本 |
dispatcher | dispatcher | string | 可選 | dubbo協議預設為all | 效能調優 | 協議的訊息派發方式,用於指定執行緒模型,比如:dubbo協議的all, direct, message, execution, connection等 | 2.1.0以上版本 |
queues | queues | int | 可選 | 0 | 效能調優 | 執行緒池佇列大小,當執行緒池滿時,排隊等待執行的佇列大小,建議不要設定,當執行緒程池時應立即失敗,重試其它服務提供機器,而不是排隊,除非有特殊需求。 | 2.0.5以上版本 |
charset | charset | string | 可選 | UTF-8 | 效能調優 | 序列化編碼 | 2.0.5以上版本 |
buffer | buffer | int | 可選 | 8192 | 效能調優 | 網路讀寫緩衝區大小 | 2.0.5以上版本 |
heartbeat | heartbeat | int | 可選 | 0 | 效能調優 | 心跳間隔,對於長連線,當物理層斷開時,比如拔網線,TCP的FIN訊息來不及傳送,對方收不到斷開事件,此時需要心跳來幫助檢查連線是否已斷開 | 2.0.10以上版本 |
telnet | telnet | string | 可選 | 服務治理 | 所支援的telnet命令,多個命令用逗號分隔 | 2.0.5以上版本 | |
register | register | boolean | 可選 | true | 服務治理 | 該協議的服務是否註冊到註冊中心 | 2.0.8以上版本 |
contextpath | contextpath | String | 可選 | 預設為空串 | 服務治理 | 2.0.6以上版本 |