【dubbo】dubbo注解方式及报空指针异常的处理方式

dubbo-provider:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://code.alibabatech.com/schema/dubbo
    http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

    <dubbo:application name="service" owner="wj" organization="ssm-service" logger="slf4j"/>
    <dubbo:registry address="zookeeper://127.0.0.1:2181"/>
    <dubbo:protocol name="dubbo" port="20882" host="127.0.0.1"/>
    <dubbo:provider timeout="15000" retries="0" delay="-1"/>
    <dubbo:consumer check="false" timeout="15000"/>

    <!--<dubbo:service interface="com.wj.service.BookService" ref="bookService"  timeout="10000"/>-->
    <!--&lt;!&ndash; 和本地bean一样实现服务 &ndash;&gt;-->
    <!--<bean id="bookService" class="com.wj.service.impl.BookServiceImpl" />-->
    
    <!-- 使用注解方式暴露接口 -->
    <dubbo:annotation package="com.wj.service" />
</beans>

impl类需要注意:@Service 导入  import com.alibaba.dubbo.config.annotation.Service;

import com.alibaba.dubbo.config.annotation.Service;
import com.wj.dao.BookDao;
import com.wj.entity.Book;
import com.wj.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;


import java.util.List;


/**
 * Created by hisen on 17-4-24.
 */
@Service
public class BookServiceImpl implements BookService {
    @Autowired
    private BookDao bookDao;

dubbo-consumer:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://code.alibabatech.com/schema/dubbo
    http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

    <dubbo:application name="consumer" owner="wj" organization="ssm-consumer" logger="slf4j"/>
    <dubbo:registry address="zookeeper://127.0.0.1:2181"/>
    <dubbo:protocol name="dubbo" port="20882" host="127.0.0.1"/>
    <dubbo:provider timeout="15000" retries="0" delay="-1"/>
    <dubbo:consumer check="false" timeout="15000"/>

     <!-- 生成远程服务代理,可以和本地bean一样使用demoService -->
    <!--<dubbo:reference id="bookService" interface="com.wj.service.BookService" />-->
    

<!-- 扫描注解包路径,多个包用逗号分隔,不填package表示扫描当前ApplicationContext中的所有类 -->
    <dubbo:annotation package="com.wj.service"></dubbo:annotation>

</beans>
@Controller
@RequestMapping("/book")
public class BookController {
  private Logger logger = LoggerFactory.getLogger(this.getClass());

  @Reference
  private BookService bookService;

运行发现,报空指针异常:

dubbo-consumer相关dubbo配置有误:

com.wj.web是有controller类的包

应该配置:<dubbo:annotation package="com.wj.web"></dubbo:annotation>

出错原因,还有可能:

spring mvc扫描的时候根本无法识别@Reference ,同一方面,dubbo的扫描也无法识别Spring @Controller ,所以两个扫描的顺序要排列好,如果先扫了controller,这时候把控制器都实例化好了,再扫dubbo的服务,就会出现空指针。

解决方法:

先扫描

<dubbo:annotation package="com.wj.web"></dubbo:annotation>

再扫描

<context:component-scan base-package="com.hisen.web" />

再运行,发现:已从数据库中查出数据,但报错:

 服务器:Failed to send message Response

客户端:Waiting server-side response timeout by scan timer. start time: 2018-08-09 16:14:41.860, end 

原因:dubbo_consumer少了

        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty</artifactId>
            <version>3.10.6.Final</version>
        </dependency>

猜你喜欢

转载自blog.csdn.net/heni6560/article/details/81537214
今日推荐