Dubbo缺省协议采用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况
Hessian协议用于集成Hessian的服务,Hessian底层采用Http通讯,采用Servlet暴露服务。适用场景:传入传出参数数据包较大,提供者比消费者个数多,提供者压力较大,可传文件。因此比较高效的做法是带上传下载文件的服务使用hessian协议,去普通的服务使用dubbo协议。
做法如下
1、搭建zookeeper(略)
2、搭建dubbo-admin(略)
以上两步请参考官方文档,非常详细
3、生产者工程的spring配置
<dubbo:application name="testinfo" />
<dubbo:registry address="zookeeper://192.168.0.228:2181" />
<dubbo:protocol name="dubbo" port="20880" />
<dubbo:protocol name="hessian" port="8080" contextpath="testinfo" server="servlet" />
<dubbo:provider protocol="hessian" />
<dubbo:service interface="com.yhi.hiwl.api.baseinfo.UploadService" ref="uploadService" protocol="hessian"/>
<dubbo:service interface="com.yhi.hiwl.api.baseinfo.LoginService" ref="loginService" protocol="dubbo"/>
3、生产者工程的web.xml配置
<servlet>
<servlet-name>dubbo</servlet-name>
<servlet-class>com.alibaba.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>
4、消费者工程spring配置
<dubbo:reference id="uploadService" interface="com.yhi.hiwl.api.baseinfo.UploadService" timeout="4000"/>
<dubbo:reference id="loginService" interface="com.yhi.hiwl.api.baseinfo.LoginService" timeout="4000"/>
这样uploadService里抛出的服务就会以hessian方式用http抛出,可以传输大文件,而loginService服务就使用dubbo协议能够高效的传输json、html等等