协议配置(Provider)dubbo:protocol

配置类:com.alibaba.dubbo.config.ProtocolConfig

说明:如果需要支持多协议,可以声明多个标签,并在中通过protocol属性指定使用的协议。

具体描述

现有协议

  1. dubbo
  2. hessian
  3. http
  4. injvm
  5. memcached
  6. redis
  7. rest
  8. rmi
  9. thrift
  10. webservice

多协议配置

  1. <!-- 多协议配置 -->
  2. <dubbo:protocol name="dubbo" port="20880" />
  3. <dubbo:protocol name="rmi" port="1099" />
  4. <!-- 使用dubbo协议暴露服务 -->
  5. <dubbo:service interface="com.alibaba.hello.api.HelloService" version="1.0.0" ref="helloService" protocol="dubbo" />
  6. <!-- 使用rmi协议暴露服务 -->
  7. <dubbo:service interface="com.alibaba.hello.api.DemoService" version="1.0.0" ref="demoService" protocol="rmi" />

多协议暴露服务

  1. <!-- 多协议配置 -->
  2. <dubbo:protocol name="dubbo" port="20880" />
  3. <dubbo:protocol name="hessian" port="8080" />
  4. <!-- 使用多个协议暴露服务 -->
  5. <dubbo:service id="helloService" interface="com.alibaba.hello.api.HelloService" version="1.0.0" protocol="dubbo,hessian" />

如何选择协议

  1. 在内网中,建议使用dubbo协议。

序列化

dubbox默认使用hessian lite(hessian2)进行序列化的,该序列化性能较低(3年前的东西),当当实现了基于kryo和fst的序列化策略。

image

  1. <dependency>
  2. <groupId>com.esotericsoftware.kryo</groupId>
  3. <artifactId>kryo</artifactId>
  4. <version>2.24.0</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>de.javakaffee</groupId>
  8. <artifactId>kryo-serializers</artifactId>
  9. <version>0.26</version>
  10. </dependency>
  11. <dubbo:protocol name="dubbo" serialization="kryo" optimizer="com.alibaba.dubbo.demo.SerializationOptimizerImpl"/>
  12. <dependency>
  13. <groupId>de.ruedigermoeller</groupId>
  14. <artifactId>fst</artifactId>
  15. <version>1.55</version>
  16. </dependency>
  17. <dubbo:protocol name="dubbo" serialization="fst" optimizer="com.alibaba.dubbo.demo.SerializationOptimizerImpl"/>
  18. //可将现有需要序列化的class注册进去,能够更快的进行序列化。
  19. public class SerializationOptimizerImpl implements SerializationOptimizer {
  20. public Collection<Class> getSerializableClasses() {
  21. List<Class> classes = new LinkedList<Class>();
  22. classes.add(BidRequest.class);
  23. classes.add(BidResponse.class);
  24. classes.add(Device.class);
  25. classes.add(Geo.class);
  26. classes.add(Impression.class);
  27. classes.add(SeatBid.class);
  28. return classes;
  29. }
  30. }