我了解客户端不是会从ZK中订阅服务,当客户端先启动的时候没有订阅到,这个时候调用,会报引用对象空指针。但是当服务端也跟着启动zk中不就恢复了该服务,客户端应该也能调用到啊。为什么怎么试都是是报空指针呢?我是个dubbo新手希望各位牛人指点,主要把问题是不理解为什么先启动客户端后启动服务器端就不行了。下面是我主要代码:
服务端配置:
<dubbo:annotation />
<!--提供方应用名称信息,这个相当于起一个名字,我们dubbo管理页面比较清晰是哪个应用暴露出来的 -->
<dubbo:application name="dubbo_provider_pj"></dubbo:application>
<!--使用zookeeper注册中心暴露服务地址 -->
<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181" />
<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880" /> <!-- 服务订阅 -->
<!-- <dubbo:reference interface = "com.cn.wwj.service.GetUserIdPass1000Service" 
id ="getUserIdPass1000Service"> </dubbo:reference> -->
<!-- 服务提供 -->
<!-- 使用 Failover Cluster 模式如果调用失败一次,可以再次重试2次调用,服务级别调用超时时间为100ms调用方法t的超时时间为80ms, 
允许重试2次,最坏情况调用花费时间160ms。dubbo:service元素配置了loadbalance=”random”,则该元素的子元素dubbo:method 
如果没有指定负载均衡策略,则默认为loadbalance=”random”,否则如果dubbo:method指定了loadbalance=”leastactive” -->
<bean id="iUserService" class="com.cn.wwj.service.impl.IUserServiceImpl" />
<dubbo:service interface="com.cn.wwj.service.IUserService"
version="1.0.0" cluster="failover" retries="2" timeout="100" ref="iUserService"
loadbalance="random">
<dubbo:method name="getUserById" retries="2" timeout="80"
loadbalance="leastactive" />
</dubbo:service>
客户端配置:
<dubbo:annotation />
<!--提供方应用名称信息,这个相当于起一个名字,我们dubbo管理页面比较清晰是哪个应用暴露出来的 -->
<dubbo:application name="dubbo_provider_pj2"></dubbo:application>
<!--使用zookeeper注册中心暴露服务地址 -->
<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181" />
<!-- 生成远程服务代理,可以和本地bean一样使用 -->
<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880" />
<!-- 订阅服务 -->
<dubbo:reference interface="com.cn.wwj.service.IUserService"
id="iUserService" url="127.0.0.1:20880"></dubbo:reference>
代码:
    @Reference
    private IUserService iUserService;
/*    @Autowired
    private GetUserIdPass1000Service getUserIdPass1000Service;*/
    @RequestMapping("/getUserById1")
    public String toIndex(HttpServletRequest request,Model model){  
        Long userId = Long.valueOf(request.getParameter("id"));  
        User user = iUserService.getUserById(userId);  
        model.addAttribute("user", user);  
        return "showUser";  
    }
报错:
  java.lang.NullPointerException
at com.cn.wwj.controller.UserController.toIndex(UserController.java:29)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:749)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:690)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(Abstract