• dubbo 使用zookeeper 出现 Dubbo客户端调用报错NullPointerException


    现在将网上的方法总结一下

    方法一:.https://blog.csdn.net/u011294519/article/details/81810631

    dubbo-provider.xml:提供者先扫描spring框架,完成spring部分的扫描,然后将为dubbo框架提供服务;消费者部分相反,先扫描dubbo服务,后扫描spring部分~

    1. 背景

        使用@Reference注解实现消费者调用服务端代码,调用报错NullPointerException,如图:

        注意:如果你的服务端没有注册到dubbo,客户端在调用时也会出现NullPointerException报错,所以可以先到dubbo-admin去看下服务端是否已经正常注册。

        dubo-admin安装方式可参照:

        https://blog.csdn.net/u011294519/article/details/81712601

    2. 服务端代码

        因为只是写一个小demo,代码逻辑十分简单

    2.1. 服务端接口

    2.2. 服务端接口实现类

           注意:这里的@Service注解需要使用com.alibaba.dubbo.config.annotation.Service。

    2.3. 服务端dubbo配置文件

    3. 客户端代码

    3.1.接口

    3.2. 测试接口

    3.3. 配置文件

    4. Dubbo-admin结果

        到这里为止看上去都很正常,但是只要客户端调用服务端方法就报NullPointerException。

    5. 解决方法

        网上找了很多方法,但是都不能解决问题,后来想到有没有可能是SpringMVC的包扫描影响了dubbo的注解扫描,然后尝试着将dubbo的包扫描配置单独抽出来,放在SpringMVC配置的最上面,果然问题解决。如图:

        然后把dubbo配置中的这个去掉,问题解决。

    但是我的问题没有解决

    方法二:https://blog.csdn.net/yuzhibo0924/article/details/80091646

    最近开发公司项目,遇到了dubbo服务为空的情况,现在把出现的情况做个简单的总结:

    dubbo为空会报空指针异常!

        1.第一种情况:引用有误,也就是再注入dubbo服务的时候,使用@Reference注解的时候,引用的并不是ali的dubbo,所以一直引入的都是错误的。导致注入为null;

        这种情况比较常见,因为粗心大意导致import 文件错误,只需要认真检查。就可以找出问题所在。

        2.第二种情况:引用很正常,使用的是@Reference的注解,也是ali的dubbo。

    但具体情况是:(我本人的情况)自己在本地测试,代码流程完全没有任何问题。于是将代码提交到开发环境进行代码测试,一切正常。然后提交测试,交由测试进行代码测试。发现问题,最后定位到dubbo服务为空。引用没有问题,那是什么原因导致的dubbo服务为null呢?后来经过同事指导,才明白问题所在。在同一个项目中,A服务引用B服务(都是注册到dubbo上的),在项目部署发布的时候,无法判断是哪个服务先注册到dubbo上的。所以在A服务中引用B服务,而且通过dubbo的方式注入,极有可能会产生服务注入为null的情况。那么此时在A服务中引用B服务,就可以使用spring框架带的@Autowired的注入方式,将B服务引用进来。这样就可以完美解决这个问题。

    但是我的问题依旧没有解决

    方法三:原因是包名不一致,包名不一致会导致提供者和消费者不在一个节点上,这样消费者永远不会获得值!!

    但是也没有解决我的问题

    方法四:

    项目设计之初是想分布式部署,所以分了客户端,和服务端。经过测试发现真的是程序启动的顺序问题。

    之前都是先启动server服务端,然后在启动client端的,但是这两天项目有点赶,调试的时候,想快点启动,所以几乎是同时启动server和client程序,甚至client先启动,然后就导致了本文标题的错误。之后我就老老实实的先启动server程序,在启动client。
    ---------------------
    原文:https://blog.csdn.net/likawei1314/article/details/80757687
    方法五

    @SpringBootApplication之前添加注解@EnableDubboConfig就可以解决了,确保优先加载dubbo配置。

  • 相关阅读:
    【leetcode】1562. Find Latest Group of Size M
    【leetcode】1561. Maximum Number of Coins You Can Get
    【leetcode】1560. Most Visited Sector in a Circular Track
    Python中用format函数格式化字符串的用法
    机器学习最常用优化之一——梯度下降优化算法综述
    python学习之argparse模块
    Ubuntu14.04安装NVIDIA显卡驱动
    Anaconda使用教程
    TensorFlow0.8代码目录结构讲解
    cmake编译opencv程序
  • 原文地址:https://www.cnblogs.com/zhulina-917/p/10608229.html
Copyright © 2020-2023  润新知