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...
    七寸知架构阅读 13,168评论 0 89
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 121,144评论 16 134
  • 在网上看到九寨沟的诺日朗大瀑布垮塌了的我,内心就像是见到了自己曾经有幸谋面一见倾心的姑娘受到了人世间的折磨一样,心...
    阿秀_eb52阅读 38评论 0 0
  • 最终,俄瑞斯忒斯还是获得了“痊愈”,他通过努力完成了“治疗”,而曾经带给他痛苦的一切,也变成了赋予他智慧和经验的吉...
    欣悦Claire阅读 45评论 1 0
  • 高考能考怎样,几乎都已经定型了,考不上985,也不会考的太差。越来越喜欢去规划自己在大学的生活。 虽然充满着未知,...
    Jay_Zhang阅读 42评论 0 0