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"/>-->
<!--<!– 和本地bean一样实现服务 –>-->
<!--<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>