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

方法一:.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配置。

dubbo 使用zookeeper 出现 Dubbo客户端调用报错NullPointerException的更多相关文章

  1. CFX客户端调用报错

    Exception in thread "main" javax.xml.ws.soap.SOAPFaultException: Unmarshalling Error: unex ...

  2. 【DUBBO】zookeeper在dubbo中作为注册中心的原理结构

    [一]原理图 [二]原理图解释 流程:1.服务提供者启动时向/dubbo/com.foo.BarService/providers目录下写入URL2.服务消费者启动时订阅/dubbo/com.foo. ...

  3. 【技术贴】webservice cxf2 客户端动态调用报错No operation was found with the name

    No operation was found with the name xxx 出错原因是因为发布服务的接口所在包路径和此接口实现类包路径不一致,比如你的服务接口可能放在了包com.x.interF ...

  4. springboot多模块项目下,子模块调用报错:程序包xxxxx不存在

    今天在用springboot搭建多模块项目,结构中有一个父工程Parent  一个通用核心工程core 以及一个项目工程A 当我在工程A中引入core时,没有问题,maven install正常 当我 ...

  5. jmeter 启动jmeter-server.bat远程调用报错: java.io.FileNotFoundException: rmi_keystore.jks (系统找不到指定的文件。)

    1.找到apache-jmeter-5.0\bin\jmeter.properties 2.修改server.rmi.ssl.disable=true (记得去除server.rmi.ssl.disa ...

  6. bug:进程可调用函数而子线程调用报错

    在调试摄像头时遇到问题:在主进程里调用下述函数能够成功,但在子线程里创建时总是失败,错误打印为 sched: RT throttling activated. UniqueObj<OutputS ...

  7. Windows平台下使用CodeBlocks+GCC编译器生成动态dll,C#调用报错

    报无法加载dll错误,解决方法: 1) 编译选择设置成x86,即-m322) 必须在c#程序目录下加上libgcc_s_dw2-1.dll

  8. artTemplate--使用artTemplate时,由于json对象属性有特殊格式 导致调用报错artTemplate,syntax error,Template Error

    我们首先看下面的代码 data = { "siteName" : "西部云谷二期17", "PM10" : "10017" ...

  9. protobuf接口调用报错:java.nio.charset.MalformedInputException: Input length = 1

    使用protobuf定义的接口api发起http请求报错,日志如下: [-- ::] DEBUG AbstractPool: - server updated, node=, server={ nod ...

随机推荐

  1. 结合JDK源码看设计模式——享元模式

    前言 在说享元模式之前,你一定见到过这样的面试题 public class Test { public static void main(String[] args) { Integer a=Inte ...

  2. append和appendTo的区别!

    今天在写dome的时候,碰到了一小点问题,就是我们想把一个小效果用jquery的办法添加到HTML页面中.我用的办法就是先在HTML中把代码写完,js和css同样写好并调试完成后.然后只保存外面最大的 ...

  3. javascript进阶之AJAX

    AJAX 一 AJAX预备知识:json进阶 1.1 什么是JSON? JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.JSON是用字符串来表示Javas ...

  4. Dynamics 365使用Execute Multiple Request删除系统作业实体记录

    摘要: 本人微信公众号:微软动态CRM专家罗勇 ,回复295或者20190112可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me ...

  5. Python进阶之函数式编程

    函数式编程 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计 ...

  6. DedeCMS清空删除所有文档后新建文档信息ID从1开始

    方法一.登录织梦后台,找到系统->系统设置->SQL命令行工具 分别运行以下命令: 清除表中的数据,删除所有文章: truncate table `dede_arctiny`; trunc ...

  7. SVN下载与安装

    首先打开浏览器上百度搜索“SVN”如下图: 或者点击:https://tortoisesvn.net/downloads.html 打开后链接后选择Downloads,选择需要下载的版本,比如我电脑是 ...

  8. QQ邮箱开启SMTP方法如何授权

    步骤一: 在打开的邮箱中心,进入设置 步骤二 从邮箱设置中心,进入帐户 步骤三 在这里可以看到POP3/SMTP服务被关闭了,因此客户端会收不到邮件,我们来开启它,查看该服务为已开启时,就可以用客户端 ...

  9. SQL Server -- 回忆笔记(三):ADO.NET之C#操作数据库

    SQL Server知识点回忆篇(三):ADO.NET之C#操作数据库 1.连接数据库 (1)创建连接字符串: 使用windows身份验证时的连接字符串: private string conStr= ...

  10. Linux 访问控制列表(access control list)

    简介 随着应用的发展,传统的linux文件系统权限控制无法适应复杂的控制需求,而ACL的出现,则是为了扩展linux的文件权限控制,以实现更为复杂的权限控制需求.其可以针对任意的用户和用户组进行权限分 ...