1.各協議的比較
| 協議名稱 | 實現描述 | 連接 | 使用場景 |
| dubbo | 傳輸:mina、netty、grizzy 序列化:dubbo、hessian2、java、json |
dubbo缺省采用單一長連接和NIO異步通訊 | 1.傳入傳出參數數據包較小 2.消費者 比提供者多 3.常規遠程服務方法調用 4.不適合傳送大數據量的服務,比如文件、傳視頻 |
| rmi | 傳輸:java rmi 序列化:java 標准序列化 |
連接個數:多連接 連接方式:短連接 傳輸協議:TCP/IP 傳輸方式:BIO |
1.常規RPC調用 2.與原RMI客戶端互操作 3.可傳文件 4.不支持防火牆穿透 |
| hessian | 傳輸:Serverlet容器 序列化:hessian二進制序列化 |
連接個數:多連接 連接方式:短連接 傳輸協議:HTTP 傳輸方式:同步傳輸 |
1.提供者比消費者多 2.可傳文件 3.跨語言傳輸 |
| http | 傳輸:servlet容器 序列化:表單序列化 |
連接個數:多連接 連接方式:短連接 傳輸協議:HTTP 傳輸方式:同步傳輸 |
1.提供者多余消費者 2.數據包混合 |
| webservice | 傳輸:HTTP 序列化:SOAP文件序列化 |
連接個數:多連接 連接方式:短連接 傳輸協議:HTTP 傳輸方式:同步傳輸 |
1.系統集成 2.跨語言調用 |
| thrift | 與thrift RPC實現集成,並在基礎上修改了報文頭 |
長連接、NIO異步傳輸 |
2、協議的配置:<dubbo:protocal>(只需在服務提供方配置即可)
| 屬性 | 類型 | 是否必填 | 缺省值 | 描述 |
| name | string | 必填 | dubbo | 協議名稱 |
| port | int | 可選 | dubbo協議缺省端口為20880, rmi協議缺省端口為1099, http和hessian協議缺省端口為80; 如果配置為-1或者沒有配置port,則 會分配一個沒有被占用的端口。 |
服務端口 |
| threadpool | string | 可選 | fixed | 線程池類型,可選:fixed/cached |
| threads | int | 可選 | 100 | 服務h定大小) |
| iothreads | int | 可選 | CPU個數+1 | io線程池大小(固定) |
| accepts | int | 可選 | 0 | 服務提供方最大可接受連接數 |
| serialization | string | 可選 | dubbo協議缺省為hessian2, rmi缺省協議為java, http協議缺省為json |
可填序列化:dubbo|hessian2| java|compactedjava|fastjson |
| dispatcher | string | 可選 | dubbo協議缺省為all | 協議的消息派發方式,用於指定線程模型, 比如:dubbo協議的all, direct, message, execution, connection等 |
| queues | int | 可選 | 0 | 線程池隊列大小,當線程池滿時, 排隊等待執行的隊列大小,建議不要設置, 當線程程池時應立即失敗,重試其它服務 提供機器,而不是排隊,除非有特殊需求。 |
| charset | string | 可選 | UTF-8 | 序列化編碼 |
| server | server | string | dubbo協議缺省為netty, http協議缺省為servlet hessian協議缺省為jetty |
協議的服務器端實現類型, 比如:dubbo協議的mina,netty等, http協議的jetty,servlet等 |
1 <dubbo:protocol name="hessian" server="jetty" 2 client="httpclient" 3 port="20880" 4 threadpool="fixed" 5 threads="50" 6 iothreads="5" 7 accepts="1000"/>
協議對應的源碼:
dubbo 協議:com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol
RMI協議: com.alibaba.dubbo.rpc.protocol.rmi.RmiProtocol
Http協議:com.alibaba.dubbo.rpc.protocol.http.HttpProtocol.InternalHandler
Hessian協議 :com.alibaba.dubbo.rpc.protocol.hessian.HessianProtocol.HessianHandler
dubbo多連接配置:
Dubbo 協議缺省每服務每提供者每消費者使用單一長連接,如果數據量較大,可以使用多個連接。
1 <dubbo:service connections="1"/> 2 <dubbo:reference connections="1"/>
<dubbo:service connections="0">或<dubbo:reference connections="0">表示該服務使用 JVM 共享長連接。缺省<dubbo:service connections="1">或<dubbo:reference connections="1">表示該服務使用獨立長連接。<dubbo:service connections="2">或<dubbo:reference connections="2">表示該服務使用獨立兩條長連接。
為防止被大量連接撐掛,可在服務提供方限制大接收連接數,以實現服務提供方自我保護。
<dubbo:protocol name="dubbo" accepts="1000" />
dubbo.properties 配置:
1 dubbo.service.protocol=dubbo
1.各協議的比較
| 協議名稱 | 實現描述 | 連接 | 使用場景 |
| dubbo | 傳輸:mina、netty、grizzy 序列化:dubbo、hessian2、java、json |
dubbo缺省采用單一長連接和NIO異步通訊 | 1.傳入傳出參數數據包較小 2.消費者 比提供者多 3.常規遠程服務方法調用 4.不適合傳送大數據量的服務,比如文件、傳視頻 |
| rmi | 傳輸:java rmi 序列化:java 標准序列化 |
連接個數:多連接 連接方式:短連接 傳輸協議:TCP/IP 傳輸方式:BIO |
1.常規RPC調用 2.與原RMI客戶端互操作 3.可傳文件 4.不支持防火牆穿透 |
| hessian | 傳輸:Serverlet容器 序列化:hessian二進制序列化 |
連接個數:多連接 連接方式:短連接 傳輸協議:HTTP 傳輸方式:同步傳輸 |
1.提供者比消費者多 2.可傳文件 3.跨語言傳輸 |
| http | 傳輸:servlet容器 序列化:表單序列化 |
連接個數:多連接 連接方式:短連接 傳輸協議:HTTP 傳輸方式:同步傳輸 |
1.提供者多余消費者 2.數據包混合 |
| webservice | 傳輸:HTTP 序列化:SOAP文件序列化 |
連接個數:多連接 連接方式:短連接 傳輸協議:HTTP 傳輸方式:同步傳輸 |
1.系統集成 2.跨語言調用 |
| thrift | 與thrift RPC實現集成,並在基礎上修改了報文頭 |
長連接、NIO異步傳輸 |
2、協議的配置:<dubbo:protocal>(只需在服務提供方配置即可)
| 屬性 | 類型 | 是否必填 | 缺省值 | 描述 |
| name | string | 必填 | dubbo | 協議名稱 |
| port | int | 可選 | dubbo協議缺省端口為20880, rmi協議缺省端口為1099, http和hessian協議缺省端口為80; 如果配置為-1或者沒有配置port,則 會分配一個沒有被占用的端口。 |
服務端口 |
| threadpool | string | 可選 | fixed | 線程池類型,可選:fixed/cached |
| threads | int | 可選 | 100 | 服務h定大小) |
| iothreads | int | 可選 | CPU個數+1 | io線程池大小(固定) |
| accepts | int | 可選 | 0 | 服務提供方最大可接受連接數 |
| serialization | string | 可選 | dubbo協議缺省為hessian2, rmi缺省協議為java, http協議缺省為json |
可填序列化:dubbo|hessian2| java|compactedjava|fastjson |
| dispatcher | string | 可選 | dubbo協議缺省為all | 協議的消息派發方式,用於指定線程模型, 比如:dubbo協議的all, direct, message, execution, connection等 |
| queues | int | 可選 | 0 | 線程池隊列大小,當線程池滿時, 排隊等待執行的隊列大小,建議不要設置, 當線程程池時應立即失敗,重試其它服務 提供機器,而不是排隊,除非有特殊需求。 |
| charset | string | 可選 | UTF-8 | 序列化編碼 |
| server | server | string | dubbo協議缺省為netty, http協議缺省為servlet hessian協議缺省為jetty |
協議的服務器端實現類型, 比如:dubbo協議的mina,netty等, http協議的jetty,servlet等 |
協議對應的源碼:
dubbo 協議:com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol
RMI協議: com.alibaba.dubbo.rpc.protocol.rmi.RmiProtocol
Http協議:com.alibaba.dubbo.rpc.protocol.http.HttpProtocol.InternalHandler
Hessian協議 :com.alibaba.dubbo.rpc.protocol.hessian.HessianProtocol.HessianHandler
dubbo多連接配置:
Dubbo 協議缺省每服務每提供者每消費者使用單一長連接,如果數據量較大,可以使用多個連接。
<dubbo:service connections="0">或<dubbo:reference connections="0">表示該服務使用 JVM 共享長連接。缺省<dubbo:service connections="1">或<dubbo:reference connections="1">表示該服務使用獨立長連接。<dubbo:service connections="2">或<dubbo:reference connections="2">表示該服務使用獨立兩條長連接。
為防止被大量連接撐掛,可在服務提供方限制大接收連接數,以實現服務提供方自我保護。
<dubbo:protocolname="dubbo"accepts="1000" />
dubbo.properties 配置:
dubbo.service.protocol=dubbo
