1. dubbo 支持多种类型的协议的服务发布 ,长连接,短连接,短连接中 webservice 就是短连接支持多个连接的协议,当使用到 webservice 协议发布服务时,添加相关的依赖
基于 apache 的cxf实现 以及添加servlet的支持这里使用 jetty 做服务的响应,也支持 servlet 方式
<dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-simple</artifactId> <version>3.3.2</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http</artifactId> <version>3.3.2</version> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-server</artifactId> <version>9.4.19.v20190610</version> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-servlet</artifactId> <version>9.4.19.v20190610</version> </dependency>
jetty 配置为dubbo的默认配置,servlet 方式为 dubbo 推荐的方式
<dubbo:protocol name="webservice" port="8080" server="jetty" />
使用也很简短即,在定义服务的时候添加 protocol协议类型即可如下,支持多协议
<bean id="userService" class="com.hebi.xuework.provider.service.UserServiceImpl"/> <dubbo:service interface="com.hebi.xuework.api.service.UserService" ref="userService" protocol="dubbo,webservice"/>
servlet 方式需要在 web.xml 中配置 DispatcherServlet
<dubbo:protocol name="webservice" port="8080" server="servlet" /> <servlet> <servlet-name>dubbo-servlet</servlet-name> <servlet-class> org.apache.dubbo.remoting.http.servlet.DispatcherServlet </servlet-class> </servlet>
<servlet-mapping> <servlet-name>dubbo-servlet</servlet-name> <url>/*</url> </servlet-mapping>
注意:当配置多协议时,要给每个暴露的服务【<dubbo:service protocol="dubbo"/>】添加对应的协议类型,否则项目启动报错
java.lang.IllegalStateException: Too much protocols found, the protocols comply to this service are :webservice but got 2 registries!