dubbox多协议配置

前段时间写了个dubbox的restful风格服务的 demo 都是以单服务的方式启动并没有发现问题。最近公司项目也从tomcat换到dubbox 的rest了,主要是前置一个 tomcat太浪费性能,经常导致测试服务器内存不够。考虑到服务更新的同时也能自动更新rest,就把提供接口的rest服务和service放到了一起,放到测试服务器发现一直无法启动,报错提示接口实现应该添加Path注解(dubbox的rest是用resteasy实现的)讲道理dubbox的rest都是基于注解的啊,但是提示我其他的service实现类都要添加Path注解,这不是搞笑吗,于是继续百度,发现虽然dubbox是基于注解的但同时也是基于协议的。

dubbox支持dubbo,rest,RMI,hessian,http,thrift等,而dubbo则是默认的协议,采用单一长连接和NIO异步通讯,不适合传视频等数据量大的场景,适合于小数据量大并发的服务调用。配置时指定name属性即可。同时也可以配置多协议:

<dubbo:protocol name="dubbo" port="20881" serialization=""/>
<dubbo:protocol name="rest" port="8081" server="tomcat" charset="utf-8"/>

暴露服务时配置协议即可:

<dubbo:service protocol="dubbo"/>

但是基于注解扫描的暴露服务方式无法指定协议:

<dubbo:annotation package="dubbox.restful.sample"/>

这时如果多种协议并存的话,dubbo就会默认注册多种协议,就导致了上面情况的发生,这时就需要分别配置协议了,由于rest服务是少数,于是单独暴露这个服务,采用bean注入的方式暴露,其他依旧采用注解方式,这就要添加一个服务提供者的默认协议:

<dubbo:provider protocol="dubbo" />

当然在接口实现类上也可指定服务协议:(不过服务多了这个就不太试用了)

@Component
@Service( version = "1.0.0", protocol = "rest" )
public class SampleServiceImpl implements SampleService {
}

这里的设置会覆盖配置文件中的设置。到这里多协议的配置就ok了,多注册中心的配置也类似,主要是多协议的并存需要不同的方式来暴露服务,而且一旦不配置协议默认会使用多种协议,同时多注册中心没有指定注册中心的时候也会同时注册到 所有注册中心,以前没有太在意协议的配置,这种多协议和多注册中心并存的情况需要特别注意。

  
BugHome版权所有丨转载请注明出处:https://minei.me/archives/206.html

你可能还感兴趣

发表评论

电子邮件地址不会被公开。 必填项已用*标注