dubbox rest 调用给dubbo添加的rest调用是画蛇添足吗

Dubbox的介绍和简单示例
Dubbo是一个来自阿里巴巴的开源分布式服务框架,当当根据自身的需求,为Dubbo实现了一些新的功能,包括REST风格远程调用、Kryo/FST序列化等等。并将其命名为Dubbox(即Dubbo Extensions)
Demo地址:
类似范例:
Provider: 暴露服务的服务提供方。
Consumer: 调用远程服务的服务消费方。
Registry: 服务注册与发现的注册中心。
Monitor: 统计服务的调用次调和调用时间的监控中心。
Container: 服务运行容器。
为什么使用Dubbox而不是Dubbo
Dubbo是阿里开源的RPC服务调用框架,已经3年没有维护了,而当当网开源的Dubbox在保证Dubbo原有功能的基础上做了一系列优化。
使用Dubbox的好处
支持REST风格远程调用(HTTP + JSON/XML):基于非常成熟的JBoss 框架,在dubbo中实现了REST风格(HTTP + JSON/XML)的远程调用,以显著简化企业内部的跨语言交互,同时显著简化企业对外的Open API、无线API甚至AJAX服务端等等的开发。事实上,这个REST调用也使得Dubbo可以对当今特别流行的“微服务”架构提供基础性支持。 另外,REST调用也达到了比较高的性能,在基准测试下,HTTP + JSON与Dubbo 2.x默认的RPC协议(即TCP + Hessian2二进制序列化)之间只有1.5倍左右的差距。
支持基于Kryo和FST的Java高效序列化实现:基于当今比较知名的和高性能序列化库,为Dubbo默认的RPC协议添加新的序列化实现,并优化调整了其序列化体系,比较显著的提高了Dubbo RPC的性能。
支持基于Jackson的JSON序列化:基于业界应用最广泛的序列化库,为Dubbo默认的RPC协议添加新的JSON序列化实现。
支持基于嵌入式Tomcat的HTTP remoting体系:基于嵌入式tomcat实现dubbo的HTTP remoting体系(即dubbo-remoting-http),用以逐步取代Dubbo中旧版本的嵌入式Jetty,可以显著的提高REST等的远程调用性能,并将Servlet API的支持从2.5升级到3.1。(注:除了REST,dubbo中的WebServices、Hessian、HTTP Invoker等协议都基于这个HTTP remoting体系)。
升级Spring:将dubbo中Spring由2.x升级到目前最常用的3.x版本,减少版本冲突带来的麻烦。
升级ZooKeeper客户端:将dubbo中的zookeeper客户端升级到最新的版本,以修正老版本中包含的bug。
支持完全基于Java代码的Dubbo配置:基于Spring的Java Config,实现完全无XML的纯Java代码方式来配置dubbo
调整Demo应用:暂时将dubbo的demo应用调整并改写以主要演示REST功能、Dubbo协议的新序列化方式、基于Java代码的Spring配置等等。
注:Dubbox和Dubbo 2.X是兼容的,没有改变Dubbo的任何已有的功能和配置方式(除了升级了Spring之类的版本)
DubboxDemo项目的安装
Git Clone https://github.com/dangdangdotcom/dubbox
Checkout出来的Dubbox通过Maven编译并安装到本地仓库。
Zookeeper安装,作为dubbox的注册中心,见:
修改配置文件地址&dubbo:registry protocol="zookeeper" address="zookeeper://xxxxxxxxx"&。
直接运行ProviderTest类启动服务发布者。
直接运行ConsumerTest类启动服务消费者。
如果dubbo protocol配置为rest的,可以直接通过浏览器访问http://xxx.xx.xx.xx:8080/user/getUserByPhone/
服务提供者最终打成jar时建议将启动类设置为com.alibaba.dubbo.container.Main,具体可见Provider的pom.xml
Dubbox支持的远程调用协议
dubbo:采用单一长连接和NIO异步通讯,基于TCP协议,默认基于netty框架进行传输,Hessian二进制序列化。
RMI:短连接同步传输,基于TCP协议,Java标准二进制序列化。
Hessian:短连接同步传输,基于HTTP协议,缺省内嵌Jetty作为服务器实现,Hessian二进制序列化。
http:短连接同步传输,基于HTTP协议,采用Spring的HttpInvoker实现,表单序列化。
webservice:短连接同步传输,基于HTTP协议,基于CXF实现,SOAP文本序列化。
thrift:thrift rpc框架。
memcached:采用KV存储的方式传输数据。
redis:采用KV存储的方式传输数据。
rest:dubbox提供,HTTP + JSON/XML,可内嵌tomcat实现http remoting体系。
Dubbox支持的序列化方式比较
推荐协议配置 &dubbo:protocol name="dubbo" serialization="kryo" port="20990" /& &dubbo:protocol name="rest" port="8080" server="tomcat" /& 参考
责任编辑:
声明:本文由入驻搜狐号的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场。
今日搜狐热点博客分类:
在配置过程中遇到两个问题:
1. 报错: object is not an instance of declaring class
&& 这是因为接口类没有暴露方法,导致服务没有实例化
2. 报错:java.lang.RuntimeException: You must use at least one, but no more than one http method annotation on
&& 这就是一开始没有把rest相关的annotation写到接口上,导致采用dubbo客户端访问的时候报错。
3. 报错:java.lang.IllegalStateException: urls to invokers error .invokerUrls.size :1, invoker.size :0.
&& 在dubbo-admin控制台中禁用服务后, 客户端调用提示这个错误. 对服务禁用后只会影响dubbo客户端访问,不会影响普通的http访问。
4. 报错:Failed to invoke the method search in the service cn.gov.zjport.dubborest.service.rest.RestDemoService. No provider available for the service
&& 在dubbo-admin控制台中禁用消费端后, 客户端调用提示这个错误.
5. 提示:main& INFO wrapper.MockClusterInvoker:& [DUBBO] force-mock: search force-mock enabled , url : zookeeper://192.168.3.140:2181/com.alibaba.dubbo.registry.RegistryService?anyhost=true&application=dubborest-test-consumer&check=false&connections=100&dubbo=2.8.4-SNAPSHOT&extension=com.alibaba.dubbo.rpc.protocol.rest.support.LoggingFilter&generic=false&interface=cn.gov.zjport.dubborest.service.rest.RestDemoService&methods=post,get,search&mock=force%3Areturn+null&organization=zjport&owner=zhenggm&pid=11280&server=servlet&side=consumer&timeout=2000&timestamp=3&validation=true, dubbo version: 2.8.4-SNAPSHOT, current host: 192.168.180.15
null
&& 在dubbo-admin控制台中屏蔽消费端后,不进行远程调用直接返回null,客户端调用提示这个信息.
6. 报错:zookeeper connect timeout 5000
zookeeper客户端版本与服务端不一致,替换zookeeper客户端zookeeper.jar
7. 报 protocol not support rest
这是传统rest调用方式改为dubbo客户端方式时发生的,主要是因为客户端缺少rest相关包,将javax.ws.rs-api 等包放上就可以了。
8. rest 客户端调用乱码
将服务端的@Produces 中加入charset=utf-8"
9.服务端启动报错:java.lang.NoSuchMethodError: javax.ws.rs.ClientErrorException.validate
这是因为类包冲突,经过反编译发现, ClientErrorException继承自WebApplicationException, 而工程中有好几个WebApplicationException来自不同的jar包,其中个别WebApplicationException是没有validate方法的。在我的工程中是因为项目中依赖的不必要的jersey的包,与dubbo使用的resteasy包冲突,将jersey的包删除即可。
10.dubbo暴露的rest服务接口类中方法都必须带上annotation,不能把不暴露的方法放在暴露的服务接口中,否则客户端启动会提示urls to invokers error .invokerUrls.size :1, invoker.size :0.
11.部署在linux服务器上,服务自注册的地址与服务器地址不一致。
可能是hosts ip设置错误,可检查/etc/sysconfig/network 中的HOSTNAME 与 /etc/hosts对应的${HOSTNAME}对应的ip地址是否为正确的地址。
12. 客户端连不上服务,connect time out.
有可能是集成外部的应用服务器如tomcat,但是发布的dubbo服务端口与tomcat端口不一致,应修改dubbo 服务端口
13. 使用rest协议时,客户端提示找不到服务,使用dubbo协议又是好的
注意rest相关的annotation标签要标注在接口上,而不是标注在实现类上,客户端是根据接口类进行解析的。
浏览: 109435 次
来自: 杭州
yuanliangding 写道pom不全呀。Spring都没 ...
pom不全呀。Spring都没有引入呀。
很不错,我运行起来了
牛叉 找了很多解决方案 你的OK了
请问下, spring mvc使用httpinvoker ,测 ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'7被浏览1,554分享邀请回答0添加评论分享收藏感谢收起0添加评论分享收藏感谢收起写回答分布式服务框架dubbox 入门示例_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
分布式服务框架dubbox 入门示例
阅读已结束,下载文档到电脑
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩23页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢}

我要回帖

更多关于 dubbo rest 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信