springcloud整合dubbo,消费者无法调用提供方,报错:org.apache.dubbo.rpc.RpcException: Failed to invoke the method.....

       在SpringCloud中会有多个微服务,各个服务之间如果要进行通信,要进行调用的话,使用的就是dubbo或者openfeign。

 一、dubbo的使用大体步骤

1.生产方和消费方pom.xml引入依赖;

      <!--常规依赖-->
      <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-dubbo</artifactId>
      </dependency>

 本案例项目使用的是下面的依赖包;

 

2.生产方和消费方启动类加入标注“@EnableDubbo”;

 

 3.配置application.yml;(参考格式如下)

# 内置配置 不允许修改 如需修改请在 nacos 上写相同配置覆盖
dubbo:
  application:
    logger: slf4j
    # 元数据中心 local 本地 remote 远程 这里使用远程便于其他服务获取
    metadataType: remote
    # 可选值 interface、instance、all,默认是 all,即接口级地址、应用级地址都注册
    register-mode: instance
    service-discovery:
      # FORCE_INTERFACE,只消费接口级地址,如无地址则报错,单订阅 2.x 地址
      # APPLICATION_FIRST,智能决策接口级/应用级地址,双订阅
      # FORCE_APPLICATION,只消费应用级地址,如无地址则报错,单订阅 3.x 地址
      migration: FORCE_APPLICATION
  # 注册中心配置
  registry:
    address: nacos://${spring.cloud.nacos.server-addr}
    group: DUBBO_GROUP
    parameters:
      namespace: ${spring.profiles.active}
  # 消费者相关配置
  consumer:
    # 结果缓存(LRU算法)
    # 会有数据不一致问题 建议在注解局部开启
    cache: false
    # 支持校验注解
    validation: jvalidationNew
    # 调用重试 不包括第一次 0为不需要重试
    retries: 0
    # 初始化检查
    check: false

 

 

dubbo:
  application:
    # 关闭qos端口避免单机多生产者端口冲突 如需使用自行开启
    qos-enable: false
  protocol:
    # 如需使用 Triple 3.0 新协议 可查看官方文档
    # 使用 dubbo 协议通信
    name: dubbo
    # dubbo 协议端口(-1表示自增端口,从20880开始)
    port: -1
    # 指定dubbo协议注册ip
    # host: 192.168.0.100
  # 消费者相关配置
  consumer:
    # 超时时间
    timeout: 3000
  scan:
    # 接口实现类扫描
    base-packages: org.sharetek.**.dubbo
  # 自定义配置
  custom:
    # 全局请求log
    request-log: true
    # info 基础信息 param 参数信息 full 全部
    log-level: info

4.生产方对外公开服务实现类用注解"@DubboService"

 

5.Dubbo正常使用

二、错误场景演示及原因分析

{
    "code": 500,
    "msg": "Failed to invoke the method getSecurityUserInfo in the service org.sharetek.system.api.RemoteSecurityUserService. Tried 1 times of the providers [192.168.72.1:20880] (1/1) from the registry 127.0.0.1:8848 on the consumer 192.168.72.1 using the dubbo version 3.2.7. Last error is: Failed to invoke remote method: getSecurityUserInfo, provider: DefaultServiceInstance{serviceName='sharetek-system', host='192.168.72.1', port=20880, enabled=true, healthy=true, metadata={dubbo.endpoints=[{\"port\":20880,\"protocol\":\"dubbo\"}], dubbo.metadata.revision=2156754ed82fcb6bf50a8f846acf3287, dubbo.metadata.storage-type=remote, timestamp=1708243528944}}, service{name='org.sharetek.system.api.RemoteSecurityUserService',group='null',version='null',protocol='dubbo',port='20880',params={side=provider, release=3.2.7, methods=getSecurityUserInfo, logger=slf4j, deprecated=false, dubbo=2.0.2, interface=org.sharetek.system.api.RemoteSecurityUserService, service-name-mapping=true, generic=false, metadata-type=remote, application=sharetek-system, prefer.serialization=fastjson2,hessian2, dynamic=true},}, cause: org.apache.dubbo.remoting.RemotingException: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.sharetek.common.dubbo.properties.DubboCustomProperties' available\r\norg.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.sharetek.common.dubbo.properties.DubboCustomProperties' available\r\n\tat org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:341)\r\n\tat org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:332)\r\n\tat cn.hutool.extra.spring.SpringUtil.getBean(SpringUtil.java:122)\r\n\tat org.sharetek.common.dubbo.filter.DubboRequestFilter.invoke(DubboRequestFilter.java:24)\r\n\tat org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:334)\r\n\tat org.apache.dubbo.rpc.filter.ClassLoaderCallbackFilter.invoke(ClassLoaderCallbackFilter.java:38)\r\n\tat org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:334)\r\n\tat com.alibaba.dubbo.rpc.Invoker$CompatibleInvoker.invoke(Invoker.java:76)\r\n\tat io.seata.integration.dubbo.alibaba.AlibabaDubboTransactionPropagationFilter.invoke(AlibabaDubboTransactionPropagationFilter.java:45)\r\n\tat com.alibaba.dubbo.rpc.Filter.invoke(Filter.java:34)\r\n\tat org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:334)\r\n\tat org.apache.dubbo.rpc.protocol.dubbo.filter.TraceFilter.invoke(TraceFilter.java:80)\r\n\tat org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:334)\r\n\tat org.apache.dubbo.rpc.filter.TimeoutFilter.invoke(TimeoutFilter.java:45)\r\n\tat org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:334)\r\n\tat com.alibaba.csp.sentinel.adapter.dubbo3.SentinelDubboProviderFilter.invoke(SentinelDubboProviderFilter.java:81)\r\n\tat org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:334)\r\n\tat org.apache.dubbo.seata.SeataTransactionPropagationProviderFilter.invoke(SeataTransactionPropagationProviderFilter.java:66)\r\n\tat org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:334)\r\n\tat org.apache.dubbo.monitor.support.MonitorFilter.invoke(MonitorFilter.java:108)\r\n\tat org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:334)\r\n\tat org.apache.dubbo.rpc.filter.ExceptionFilter.invoke(ExceptionFilter.java:55)\r\n\tat org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:334)\r\n\tat org.apache.dubbo.rpc.filter.AccessLogFilter.invoke(AccessLogFilter.java:119)\r\n\tat org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:334)\r\n\tat org.apache.dubbo.metrics.observation.ObservationReceiverFilter.invoke(ObservationReceiverFilter.java:56)\r\n\tat org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:334)\r\n\tat org.apache.dubbo.rpc.filter.GenericFilter.invoke(GenericFilter.java:206)\r\n\tat org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:334)\r\n\tat cn.dev33.satoken.context.dubbo3.filter.SaTokenDubbo3ProviderFilter.invoke(SaTokenDubbo3ProviderFilter.java:47)\r\n\tat org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:334)\r\n\tat org.apache.dubbo.rpc.filter.ClassLoaderFilter.invoke(ClassLoaderFilter.java:54)\r\n\tat org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:334)\r\n\tat org.apache.dubbo.rpc.filter.EchoFilter.invoke(EchoFilter.java:41)\r\n\tat org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:334)\r\n\tat org.apache.dubbo.metrics.filter.MetricsFilter.invoke(MetricsFilter.java:76)\r\n\tat org.apache.dubbo.metrics.filter.MetricsProviderFilter.invoke(MetricsProviderFilter.java:36)\r\n\tat org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:334)\r\n\tat org.apache.dubbo.rpc.filter.ProfilerServerFilter.invoke(ProfilerServerFilter.java:64)\r\n\tat org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:334)\r\n\tat org.apache.dubbo.rpc.filter.ContextFilter.invoke(ContextFilter.java:144)\r\n\tat org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CopyOfFilterChainNode.invoke(FilterChainBuilder.java:334)\r\n\tat org.apache.dubbo.rpc.cluster.filter.FilterChainBuilder$CallbackRegistrationInvoker.invoke(FilterChainBuilder.java:196)\r\n\tat org.apache.dubbo.rpc.protocol.dubbo.DubboProtocol$1.reply(DubboProtocol.java:156)\r\n\tat org.apache.dubbo.remoting.exchange.support.header.HeaderExchangeHandler.handleRequest(HeaderExchangeHandler.java:110)\r\n\tat org.apache.dubbo.remoting.exchange.support.header.HeaderExchangeHandler.received(HeaderExchangeHandler.java:200)\r\n\tat org.apache.dubbo.remoting.transport.DecodeHandler.received(DecodeHandler.java:53)\r\n\tat org.apache.dubbo.remoting.transport.dispatcher.ChannelEventRunnable.run(ChannelEventRunnable.java:62)\r\n\tat java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)\r\n\tat java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)\r\n\tat org.apache.dubbo.common.threadlocal.InternalRunnable.run(InternalRunnable.java:41)\r\n\tat java.base/java.lang.Thread.run(Thread.java:842)\r\n",
    "data": null
}

错因分析:

1.生产方和消费方必须在同一个命名空间,同一分组,同一个集群;(好像不是这个原因导致,只生效过一次)

2.redis中存在脏数据,需要清理;(这个的可能性比较大,开始一直掉不通,后来一直好着)

// redis客户端执行
del keys *

flushall

 

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: ion org.apache.dubbo.rpc.rpcexceptionDubbo框架中的一个异常类,用于表示RPC调用过程中出现的异常。在Dubbo中,RPC调用是指远程过程调用,即客户端调用服务端的法。当RPC调用过程中出现异常时,Dubbo会抛出org.apache.dubbo.rpc.rpcexception异常,以便开发人员捕获并处理异常。该异常类包含了异常的类型、异常信息、异常堆栈等信息,便开发人员进行异常排查和处理。 ### 回答2: org.apache.dubbo.rpc.RpcExceptionDubbo框架中的一个异常类,它承载了dubbo出现异常时的信息。当Dubbo在进行服务调用时出现错误时,RpcException会被抛出,然后通过Dubbo框架的异常处理机制向上抛出给用户。 RpcException包含了异常代码、异常信息、异常堆栈等相关信息。常见的异常代码包括调用服务超时、服务提供返回了错误的响应等等。RpcExceptionDubbo支持分布式调用的重要组成部分,可以帮助用户更加轻松便捷地处理异常情况,保证调用质量和稳定性。 针对RpcException,可以通过try-catch机制来进行异常处理,根据不同的异常代码进行特定的处理。例如,当出现超时异常时,可以尝试增加超时时间或调整Dubbo框架的配置,以提高调用效率和质量。同时,Dubbo提供了非常全面的日志记录功能,可以通过日志信息来快速定位问题,提高调试效率。 总之,RpcExceptionDubbo框架中非常重要的一个异常类,对于保证分布式调用的正常运行和稳定性具有不可替代的作用。了解RpcException的特性和使用法,对于开发高质量的分布式应用程序非常重要。 ### 回答3: org.apache.dubbo.rpc.rpcexceptionDubbo框架中的异常类,是所有Dubbo异常的父类。Dubbo是一款高性能的分布式服务框架,但在运行时可能会遇到很多异常情况,例如网络不稳定、服务提供者节点宕机、消费者节点请求超时等情况。为了更好地处理这些异常情况,Dubbo定义了一整套异常类,用于对异常情况进行描述和处理。 org.apache.dubbo.rpc.rpcexceptionDubbo异常中最基础的类,所有Dubbo异常都继承自它。它包含了一些常用的属性,如异常编码、异常信息、异常原因等,这些属性可以帮助我们更好地定位问题,快速修复异常。同时,它也提供了一些常用的法,例如getErrorCode()、getMessage()、getCause()等,可以便地获取异常的相关信息,从而更好地进行异常处理。 在使用Dubbo框架时,我们需要对可能出现的异常做好充分的准备,避免因异常而导致系统出现不可预料的问题。当我们遇到异常时,可以通过org.apache.dubbo.rpc.rpcexception类来获取异常信息及原因,进而做出相应的处理。例如,我们可以在消费者节点中通过捕获org.apache.dubbo.rpc.rpcexception异常来判断服务是否可用,从而采取其他措施来保证系统的正常运行。 总之,org.apache.dubbo.rpc.rpcexceptionDubbo框架中异常处理的基础类,掌握它的用法可以帮助我们更好地应对系统异常情况。在使用Dubbo框架时,我们应该重视异常处理,从而保证系统的可靠性、稳定性和可扩展性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值