Webservice 協議

功能說明

基於 WebService 的遠端呼叫協定,基於 Apache CXF 的 frontend-simpletransports-http 實作。支援 2.3.0 及以上版本。

CXF 是 Apache 的一個開源 RPC 框架,由 Xfire 和 Celtix 合併而成。

  • 連線數量:多連線
  • 連線方式:短連線
  • 傳輸協定:HTTP
  • 傳輸方式:同步傳輸
  • 序列化:SOAP 文字序列化
  • 適用場景:系統整合、跨語言呼叫

它可以與原生 WebService 服務互通,也就是

  • 提供者使用 Dubbo 的 WebService 協定暴露服務,消費者直接使用標準 WebService 介面呼叫,
  • 或者提供者使用標準 WebService 暴露服務,消費者使用 Dubbo 的 WebService 協定呼叫。

限制

  • 參數和返回值需要實作 Serializable 介面
  • 參數盡量使用基本類型和 POJO

使用場景

發布服務(內部/外部),不論客戶端類型或效能,建議使用 webservice。伺服器已確定使用 webservice,客戶端無法選擇,必須使用 webservice。

使用方法

依賴關係

從 Dubbo 3 開始,Webservice 協定不再內嵌於 Dubbo 中,需要單獨引入一個獨立的 模組

<dependency>
    <groupId>org.apache.dubbo.extensions</groupId>
    <artifactId>dubbo-rpc-webservice</artifactId>
    <version>1.0.0</version>
</dependency>
<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-frontend-simple</artifactId>
    <version>2.6.1</version>
</dependency>
<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-transports-http</artifactId>
    <version>2.6.1</version>
</dependency>

配置協定

<dubbo:protocol name="webservice" port="8080" server="jetty" />

配置預設協定

<dubbo:provider protocol="webservice" />

配置服務協定

<dubbo:service protocol="webservice" />

多埠

<dubbo:protocol id="webservice1" name="webservice" port="8080" />
<dubbo:protocol id="webservice2" name="webservice" port="8081" />

直接連線

<dubbo:reference id="helloService" interface="HelloWorld" url="webservice://10.20.153.10:8080/com.foo.HelloWorld" />

###WSDL

http://10.20.153.10:8080/com.foo.HelloWorld?wsdl

Jetty 伺服器(默認)

<dubbo:protocol ... server="jetty" />
<dubbo:protocol ... server="servlet" />

配置 DispatcherServlet

<servlet>
         <servlet-name>dubbo</servlet-name>
         <servlet-class>org.apache.dubbo.remoting.http.servlet.DispatcherServlet</servlet-class>
         <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
         <servlet-name>dubbo</servlet-name>
         <url-pattern>/*</url-pattern>
</servlet-mapping>

如果使用 servlet 來分派請求

  • 協定端口 <dubbo:protocol port="8080" /> 必須與 servlet 容器的端口相同。
  • 協定的上下文路徑 <dubbo:protocol contextpath="foo" /> 必須與 servlet 應用程式的上下文路徑相同。

上次修改時間:2023 年 2 月 22 日:合併重構網站 (#2293) (4517e8c1c9c)