Spring配置文件
提供者和消费者,分别为两个spring工程
提供者
<description>Spring Configuration</description>
<!-- 提供方应用信息,用于计算依赖关系 -->
<dubbo:application name="demo-provider"/>
<!-- 使用multicast广播注册中心暴露服务地址 -->
<dubbo:registry id="myzk" address="127.0.0.1:2181" protocol="zookeeper"/>
<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol id="mydubbo" name="dubbo" port="20880"/>
<dubbo:provider registry="myzk" protocol="mydubbo"/>
<!-- 使用注解方式暴露接口 -->
<dubbo:annotation package="com.sima.testa" />
消费者
<description>Spring MVC Configuration</description>
<!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
<dubbo:application name="demo-consumer"/>
<!-- 使用multicast广播注册中心暴露发现服务地址 -->
<!--<dubbo:registry address="multicast://224.5.6.7:1234"/>-->
<dubbo:registry id="zk" address="127.0.0.1:2181" protocol="zookeeper"/>
<dubbo:consumer registry="zk"/>
<!-- 使用注解方式暴露接口 -->
<dubbo:annotation package="com.sima.testb" />
pom配置
#接口文件导入
<dependency>
<groupId>com.maple.dubbodemo</groupId>
<artifactId>dubbo-api</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/webapp/WEB-INF/lib/dubbo-api-1.0-SNAPSHOT.jar</systemPath>
</dependency>
其余pom配置见Dubbo学习(三)HelloWorld
提供者服务实现-注解方式
使用@Service
import com.alibaba.dubbo.rpc.RpcContext;
import org.springframework.stereotype.Service;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* Created by maple on 2017-10-26.
*/
@Service
@com.alibaba.dubbo.config.annotation.Service
public class HelloServiceImpl implements HelloService {
public String sayHello(String content) {
System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] Hello " + content + ", request from consumer: " + RpcContext.getContext().getRemoteAddress());
return "Hello " + content + ", response form provider: " + RpcContext.getContext().getLocalAddress();
}
}
消费者使用-注解方式
使用@Reference
@Controller
@RequestMapping(value = "${adminPath}/test/testData")
public class TestDataController extends BaseController {
@Reference
HelloService helloService;
@RequestMapping(value = "testService")
@ResponseBody
public String testService( ) {
String s = "helloService is null";
if (null == helloService){
return s;
}
try {
s = helloService.sayHello("test");
}catch (Exception e){
e.printStackTrace();
}
System.out.println("=======" + s);
return s;
}
}
注意
注解无效,空指针
原因:spring 扫描的时候无法识别@Reference ,dubbo的扫描也无法识别Spring @Controller,如果先扫了controller,这时候把控制器都实例化好了,再扫dubbo的服务,就会出现空指针。因此,提供者先扫描spring框架,完成spring部分的扫描,然后将为dubbo框架提供服务;消费者部分相反,先扫描dubbo服务,后扫描spring部分
网友评论