怎么用注解的方式发布dubbo服务

 我来答
地瓜说机
2017-09-19 · TA获得超过2.9万个赞
知道大有可为答主
回答量:2.3万
采纳率:91%
帮助的人:1.2亿
展开全部
使用 @com.alibaba.dubbo.config.annotation.Service 发布dubbo服务的时候,当服务类没有加入@Transactional的时候没有问题.
但是当加入事务后【@Transactional】, dubbo的 AnnotationBean 扫描 类执行下面的代码的时候就获取不到对应的注解,也就发布不了服务。

究其原因,是因为Dubbo提供的注解没有@Inherited元注解。

我们通过@Transactional标注过的Service产生一个代理类,这个代理类有两种生成方式。一种是jdk动态代理,一种是CGLib动态代理。
jdk动态代理生成的代理类与当前类共同实现相同的接口,所以与当前类也只是间接调用的关心,不在此次讨论范围。
CGLib生成的代理类为当前Service的子类,可以集成到当前Service的注解。
根据需求,我们需要更改Dubbo的源码

在Dubbo的Service注解上加上@Inherited,使这个注解变成可继承的。
然后再当前项目的spring的主配置文件中强制所有bean使用CGLib代理

这样服务即可正常发布。
匿名用户
2017-09-19
展开全部
dubbo支持多种远程调用方式,例如dubboRPC(二进制序列化+tcp协议)、httpinvoker(二进制序列化+http协议,至少在开源版本没发现对文本序列化的支持)、hessian(二进制序列化+http协议)、WebServices(文本序列化+http协议)等等,但缺乏对当今特别流行的REST风格远程调用(文本序列化+http协议)的支持。有鉴于此,我们基于标准的JavaRESTAPI——JAX-RS2.0(JavaAPIforRESTfulWebServices的简写),为dubbo提供了接近透明的REST调用支持。由于完全兼容Java标准API,所以为dubbo开发的所有REST服务,未来脱离dubbo或者任何特定的REST底层实现一般也可以正常运行。特别值得指出的是,我们并不需要完全严格遵守REST的原始定义和架构风格。即使著名的TwitterRESTAPI也会根据情况做适度调整,而不是机械的遵守原始的REST风格。附注:我们将这个功能称之为REST风格的远程调用,即RESTfulRemoting(抽象的远程处理或者调用),而不是叫RESTfulRPC(具体的远程“过程”调用),是因为REST和RPC本身可以被认为是两种不同的风格。在dubbo的REST实现中,可以说有两个面向,其一是提供或消费正常的REST服务,其二是将REST作为dubboRPC体系中一种协议实现,而RESTfulRemoting同时涵盖了这个面向。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式