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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么用注解的方式发布dubbo服务相关的知识,希望对你有一定的参考价值。

使用 @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代理

这样服务即可正常发布。
参考技术A 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同时涵盖了这个面向。

以上是关于怎么用注解的方式发布dubbo服务的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot与Dubbo整合的三种方式

dubbo学习配置dubbo 注解方式配置

springboot 注解使用dubbo怎么调用

dubbo从入门到精通 与springBoot集成的三种方式(十一)

玩转Spring Boot 集成Dubbo

SpringBoot使用AOP导致dubbo服务不注册