首页 > 其他分享 >Dubbo23_解决Dubbo无法发布被事务代理的Service问题7

Dubbo23_解决Dubbo无法发布被事务代理的Service问题7

时间:2024-03-26 11:11:18浏览次数:31  
标签:Dubbo 事务 Service 代理 Dubbo23 服务提供者 注解

一、问题展示

 前面我们已经完成了Dubbo的入门案例,通过入门案例我们可以看到通过Dubbo提供的标签配置就可以进行包扫描,扫描到@Service注解的类就可以被发布为服务。

 但是我们如果在服务提供者类上加入@Transactional事务控制注解后,服务就发布不成功了。原因是事务控制的底层原理是为服务提供者类创建代理对象,而默认情况下Spring是基于JDK动态代理方式创建代理对象,而此代理对象的完整类名为com.sun.proxy.$Proxy42(最后两位数字不是固定的),导致Dubbo在发布服务前进行包匹配时无法完成匹配,进而没有进行服务的发布。

 在入门案例的服务提供者dubbodemo_provider工程基础上进行展示

 操作步骤:

  (1)在pom.xml文件中增加maven坐标

 

  (2)在applicationContext-service.xml配置文件中加入数据源、事务管理器、开启事务注解的相关配置

    

 

 

    上面连接的数据库可以自行创建

  (3)在HelloServiceImpl类上加入@Transactional注解

 

  (4)启动服务提供者和服务消费者,并访问

    

  上面的错误为没有可用的服务提供者

  查看dubbo管理控制台发现服务并没有发布,如下:

 

  可以通过断点调试的方式查看Dubbo执行过程,Dubbo通过AnnotationBean的postProcessAfterInitialization方法进行处理

 

 

二、解决方案

 通过上面的断点调试可以看到,在HelloServiceImpl类上加入事务注解后,Spring会为此类基于JDK动态代理技术创建代理对象,创建的代理对象完整类名为com.sun.proxy.$Proxy35,导致Dubbo在进行包匹配时没有成功(因为我们在发布服务时扫描的包为com.itheima.service),所以后面真正发布服务的代码没有执行。

 解决方式操作步骤:

  (1)修改applicationContext-service.xml配置文件,开启事务控制注解支持时指定proxy-target-class属性,值为true。其作用是使用cglib代理方式为Service类创建代理对象

 

    

  (2)修改HelloServiceImpl类,在Service注解中加入interfaceClass属性,值为HelloService.class,作用是指定服务的接口类型

 

   此处也是必须要修改的,否则会导致发布的服务接口为SpringProxy,而不是HelloService接口,如下:

    

 

标签:Dubbo,事务,Service,代理,Dubbo23,服务提供者,注解
From: https://www.cnblogs.com/ajing2018/p/18096191

相关文章

  • Dubbo源码解析-Provider服务暴露Export源码解析
    上篇我们介绍了ServiceBean初始化和依赖注入过程,地址如下Dubbo源码-Provider服务端ServiceBean初始化和属性注入-CSDN博客    本文主要针Dubbo服务端服务Export过程,从dubbo源码角度进行解析。    Dubbo服务端暴露细节流程比较长,也是面试过程中比较常问的技......
  • (Service)服务启动流程分析(Android 10.0)
    (Service)服务启动流程分析,AMS内保活服务(Android10.0)frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.javaframeworks/base/services/core/java/com/android/server/am/ActiveServices.javaframeworks/base/core/java/android/app/Contex......
  • Kubernetes之Service
    一、Service的概念与定义1.Service的概念Service是Kubernetes实现微服务架构的核心概念,主要用于提供网络服务。通过Service的定义,可以对客户端应用屏蔽后端Pod实例数量及PodIP地址的变化,通过负载均衡策略实现请求到后端Pod实例的转发,为客户端应用提供一......
  • 初用scrapy 报错503 Service Unavailable问题
    毕设基于Hadoop的电子产品推荐系统 系统需要大量的电子产品信息,爬取的是中关村的数据(没有像京东一样的反爬机制)使用scrapyspider爬取页面信息中,可以获取部分页面数据,但爬取一些页面时,会报错503ServiceUnavailable部分代码详情defparse(self,response):if......
  • skynet框架:lua service支持监控告警
    问题场景是:服务A生产大量请求消息call到服务B,服务B瞬间达到消费能力的瓶颈,导致服务A堆积大量的yield状态协程,服务B消息队列堆积大量待处理消息,业务上出现卡顿、超时甚至物理机器内存吃满被瞬间击穿的问题;我们使用云服务器产品部署游戏业务,起因是游戏线上收到反馈在某些时间节点频......
  • Dubbo23_Dubbo相关配置说明6
    一、包扫描<dubbo:annotationpackage="com.itheima.service"/>服务提供者和服务消费者都需要配置,表示包扫描,作用是扫描指定包(包括子包)下的类。如果不使用包扫描,也可以通过如下配置的方式来发布服务-不推荐:<beanid="helloService"class="com.itheima.service.impl......
  • Dubbo23_Dubbo管理控制台5
    我们在开发时,需要知道Zookeeper注册中心都注册了哪些服务,有哪些消费者来消费这些服务。我们可以通过部署一个管理中心来实现。其实管理中心就是一个web应用,部署到tomcat即可。一、安装安装步骤:(1)将资料中的dubbo-admin-2.6.0.war文件复制到tomcat的webapps目录下(2)启......
  • Dubbo23_服务注册中心Zookeeper3
    通过前面的Dubbo架构图可以看到,Registry(服务注册中心)在其中起着至关重要的作用。Dubbo官方推荐使用Zookeeper作为服务注册中心。一、Zookeeper介绍Zookeeper是ApacheHadoop的子项目,是一个树型的目录服务,支持变更推送,适合作为Dubbo服务的注册中心,工业强度较高,可用于生产......
  • Dubbo23_Apache Dubbo概述2
    一、Dubbo简介ApacheDubbo是一款高性能的JavaRPC框架。其前身是阿里巴巴公司开源的一个高性能、轻量级的开源JavaRPC框架,可以和Spring框架无缝集成。什么是RPC?RPC全称为remoteprocedurecall,即**远程过程调用**。比如两台服务器A和B,A服务器上部署一个应用,B服务器上......
  • Dubbo23_软件架构的演进过程1
    软件架构的发展经历了由单体架构、垂直架构、SOA架构到微服务架构的演进过程,下面我们分别了解一下这几个架构。一、单体架构架构说明:全部功能集中在一个项目内(Allinone)。架构优点:​架构简单,前期开发成本低、开发周期短,适合小型项目。架构缺点:全部功能集成在一个......