dubbo注解发布服务 事务问题解决方案

问题:在使用dubbo 2.5.3之前的版本@Service来发布服务时,当该服务中有@Transactional,是无法正常发布的?
解决方案:
  • 因为事务TransactionManagement默认是使用了jdk的代理即基于接口的代理,必须改成基于类的代理,@service才会生效,所以必须修改代理方式,如果是javaconfig来配置,加上@EnableTransactionManagement(proxyTargetClass=true),如果是xml配置:<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />

  • 进行了第一步之后,发现仍然不能发布服务,因为dubbo的@Service源码@Inherited,所以没有是不能被代理类继承的,所以还需要修改dubbo @Service的源码,在annotation上加入@Inherited,这样代理类就会继承了这个注解。(注:目前dubbo的master的分支已经修复了这个问题,但是没有发正式的版本。

  • 虽然已经发布了,但是会发现发布的服务是spring的代理SpringProxy(可以通过dubbo-admin看到,或者启动日志),不是你想要的,无法正常引用,因为必须在@Service中指定interfaceName,指定发布的服务的名称,例:@Service(version = "1.0.0",interfaceName = "com.zl.dubbotest.api.HelloService")

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 0 准备 安装注册中心:Zookeeper、Dubbox自带的dubbo-registry-simple;安装Du...
    七寸知架构阅读 14,014评论 0 88
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,886评论 18 139
  • 有次去HK,五一节前一天。夏至的天气干燥闷热,令人烦闷。密密麻麻的人流一波又一波的的挤向关口。各种声音交杂,等待...
    严小希阅读 303评论 3 5
  • 在网上看到九寨沟的诺日朗大瀑布垮塌了的我,内心就像是见到了自己曾经有幸谋面一见倾心的姑娘受到了人世间的折磨一样,心...
    阿秀_eb52阅读 136评论 0 0
  • 最终,俄瑞斯忒斯还是获得了“痊愈”,他通过努力完成了“治疗”,而曾经带给他痛苦的一切,也变成了赋予他智慧和经验的吉...
    欣悦Claire阅读 165评论 1 0