`

被事务代理的spring service 不能使用注解方式发布dubbo服务的问题解决

阅读更多

问题:

       使用 @com.alibaba.dubbo.config.annotation.Service 发布dubbo服务的时候,当服务类没有加入@Transactional的时候没有问题.

 

       但是当加入事务后,spring bean 事务代理, dubbo的 AnnotationBean 扫描 类执行下面的代码的时候就获取不到对应的注解,也就发布不了服务:

 

Java代码  收藏代码
  1. Service service = bean.getClass().getAnnotation(Service.class);  
  2.        if (service != null) {  

 

 

因为被cglib 或者 java proxy 代理的类获取不到该dubbo service注解.

 

 

解决办法:

 

     思路:  让代理类可以获取@com.alibaba.dubbo.config.annotation.Service , name就需要在 该注解上加入

java.lang.annotation.Inherited   意思是: 使代理类继承该注解,使之可以通过bean.getClass().getAnnotation(Service.class) 获取到.

 

这样 dubbo的export() 发布逻辑可以正常执行 . 那么dubbo服务即可正常发布了.

 

缺点:

      需要侵入dubbo的源码,不过貌似没别的好些的办法.否则就只能手动通过 javaconfig 或者 xml 去发布服务.

 

优点:  

       因为dubbo使用的spring 版本默认比较老. 所以通过dubbo.xml的 方式发布会跟默认的spring 上下文的bean加载冲突.报一些莫名其妙的问题. 比如 bean找不到之类的. 原因就是 因为dubbo的bean初始化和 现有的工程的spring 高版本的初始化机制冲突.

 

那么通过这种方式.就不侵入现有的spring bean上下文. 只是 加载了一个 AnnotationBean 这么个bean 由这个bean 去扫描有dubbo service注解的类,找到对应的bean并且export() 发布服务出去.

分享到:
评论

相关推荐

    spring_cxf_dubbo

    通过Spring的@Service、@Reference等注解,可以实现服务的自动扫描和注入,简化服务调用过程。同时,结合SpringMVC,可以将Dubbo服务无缝融入到Web应用中,实现前后端的分离。 【总结】 "spring_cxf_dubbo"这个...

    dubbo spring mybatis redis

    【标题】"dubbo spring mybatis redis" 涵盖了四个关键的开源技术,它们在企业级应用开发中扮演着重要角色。Dubbo 是一个高性能、轻量级的 Java RPC 框架,用于构建分布式服务。Spring 是一个广泛使用的 Java 应用...

    springboot集成dubbo实现服务提供调用

    在现代微服务架构中,Spring Boot以其简洁的配置和快速的应用开发能力被广泛应用,而Dubbo作为阿里巴巴开源的高性能服务框架,致力于提供高性能和透明化的RPC(远程过程调用)服务。本教程将详细讲解如何将Spring ...

    dubbo上传文件+oss上传文件服务.zip

    在本项目中,Spring可能被用来管理Dubbo服务的生命周期,以及提供与OSS交互的bean,例如通过`@Autowired`注解自动注入OSS客户端实例。 文件上传的过程中,通常需要考虑以下几个关键点: 1. **文件合法性校验**:在...

    springMVC+spring+dubbo hello world测试项目

    Dubbo的核心概念包括服务提供者(Provider)、服务消费者(Consumer)、注册中心(Registry)和服务监控(Monitor),这些组件共同构建了高可用的服务治理框架。 【项目结构】 在这个"springMVC+spring+dubbo hello...

    基于javaConfig的springDataJpa+dubbo+springMvc的搭建

    在本项目中,我们主要探讨如何使用JavaConfig配置Spring Data JPA、Dubbo以及Spring MVC来构建一个完整的微服务架构。下面将详细讲解这些技术及其整合过程。 **Spring Data JPA** Spring Data JPA是Spring框架的一...

    spring+spring mvc+mybatis+mysql+dubbo整合开发任务流程后台管理系统.zip

    这是一个基于Java技术栈的后台管理系统开发项目,集成了Spring、Spring MVC、MyBatis、MySQL数据库和Dubbo服务治理框架。下面将详细讲解这些技术及其整合应用的知识点。 1. **Spring框架**:Spring是Java领域中最...

    Dubbo、spring、zookeeper示例搭建

    - 在Spring配置文件中,声明服务提供者的Bean,并添加Dubbo的@Service注解。 ### 步骤5:定义服务消费者(Consumer) - 创建一个Consumer类,通过Dubbo的`@Reference`注解引入服务提供者。 - 在Spring配置文件中,...

    dubbo2-spring4-mybatis3

    1. **服务暴露与消费**:Dubbo的@Service和@Reference注解用于标记服务提供者和消费者的类。 2. **数据访问优化**:Mybatis的动态SQL和缓存机制可以提升查询效率。 3. **事务管理**:Spring的@Transactional注解用于...

    springmvc+mybatis+dubbo

    - 如果数据库操作被封装为服务,Service 可以通过 Dubbo 远程调用该服务,获取数据。 - Dubbo 负责找到提供服务的节点,进行负载均衡,确保请求的可靠性和效率。 - 最后,Controller 将 Service 返回的数据转换为 ...

    dubbo+zk+ssm源码+dubbo-admin

    1. **服务提供者(Provider)**:提供服务的模块,通过`@Service`注解暴露服务。 2. **服务消费者(Consumer)**:调用远程服务的模块,通过`@Reference`注解引用服务。 3. **注册中心(Registry)**:用于服务的...

    Dubbo和Zookeeper整合入门案例

    在这个入门案例中,开发者已经实现了负载均衡,并且解决了无法发布被事务代理的Service问题。这意味着案例中可能涉及到了对Spring事务管理的配置,以确保服务在分布式环境下的事务一致性。 **消费方(Consumer)和...

    基于JAVA,spring,dubbo做的一套个人博客后台工程_javaweb_spring_dubbo_mybatis_源码.

    该压缩包文件“基于JAVA,spring,dubbo做的一套个人博客后台工程_javaweb_spring_dubbo_mybatis_源码.zip”提供了一个完整的个人博客后台系统的源代码,主要采用了JAVA、Spring、Dubbo以及MyBatis这四大技术栈。...

    SpringBoot整合dubbo

    本项目是关于如何将分布式服务框架Dubbo与Spring Boot进行整合的实践,旨在实现一个基本的增删改查功能,并且涉及前端页面、数据库连接池、事务管理、缓存和消息队列等多个方面。以下将详细介绍这些知识点。 首先,...

    Dubbo面试题(2022最新版)

    在使用Dubbo的过程中可能会遇到各种问题,如服务注册失败、网络连接不稳定、性能瓶颈等,这些问题通常需要结合具体的日志和监控数据来进行排查和解决。 #### 十二、RPC 1. **为什么要有RPC?** RPC(Remote ...

    SpringBoot 整合 dubbo

    - 使用@DubboService和@DubboReference注解:在服务提供者侧使用`@DubboService`注解标记服务实现类,消费者侧使用`@DubboReference`注解注入服务接口。 - 启动应用:运行SpringBoot主类,启动应用,Dubbo服务自动...

    史上最全40道Dubbo面试题!.zip

    限流防止系统过载,熔断保护服务不被雪崩效应拖垮,Dubbo可以通过Hystrix等组件实现这些功能。 21. **如何进行服务降级?** 当服务不可用或性能下降时,可以返回默认值、缓存数据或抛出异常,保证核心业务的正常...

    spring+springmvc+mybatis+shiro+freemarker+dubbo

    这个框架结合了Spring、SpringMVC、MyBatis、Shiro、FreeMarker以及Dubbo的核心技术,用于构建高效、可扩展的后端服务。 1. **Spring**:这是一个全面的Java企业级应用开发框架,提供依赖注入(DI)和面向切面编程...

    基于dubbo的分布式系统.zip

    4. 注册服务:通过Dubbo的Service注解将服务暴露出去,同时配置注册中心,使得服务能被其他消费者找到。 5. 消费服务:在消费者端,通过Reference注解引用服务,实现远程调用。 五、数据库设计与集成 1. 数据库表...

    ssm企业级框架精简版本,纯注解,绝对原创(最新版本,之前连接失效了)

    在这个精简版本中,Controller、Service和Model可能都使用了注解进行配置,减少了XML配置文件的工作量。 MyBatis是一个轻量级的持久层框架,它将SQL语句与Java代码分离,通过注解或XML配置文件将SQL与Java类映射...

Global site tag (gtag.js) - Google Analytics