您的位置:首页 > 编程语言 > Java开发

Spring Boot + Dubbo 可运行的例子源码-实现服务注册和远程调用

2017-09-14 11:01 1201 查看
最近公司的一个分布式系统想要尝试迁移到Dubbo,项目本身是Spring Boot的,经过一些努力,最终也算是搭建起一个基础的框架了,放到这里记录一下。需要依赖一个外部的zookeeper。

源码地址:点我

项目结构:



Maven构建的Spring Boot 多模块项目,provide为服务提供者,开放出接口供外部访问;consume为服务消费者,RPC调用provide提供的服务。

Provide

Dubbo配置类:

@Configuration
@PropertySource("classpath:dubbo/dubbo.properties")
@ImportResource({ "classpath:dubbo/*.xml" })
public class DubboConfig {

}


在resources下新建dubbo文件,并添加 dubbo-provider.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<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="${dubbo.application.name}"/>

<dubbo:registry protocol="${dubbo.registry.protocol}" address="${dubbo.registry.address}"/>

<dubbo:protocol name="${dubbo.protocol.name}" port="${dubbo.protocol.port}"/>

<dubbo:service interface="com.csonezp.TestService"
ref="testService" retries="0" timeout="6000"/>
</beans>


dubbo.properties文件:

#应用名称
dubbo.application.name=example-provider
#注册中心类型
dubbo.registry.protocol=zookeeper
#注册中心地址
dubbo.registry.address=127.0.0.1:2181
#暴露服务方式
dubbo.protocol.name=dubbo
#暴露服务端口
dubbo.protocol.port=20880


com.csonezp.TestService:


public interface TestService {
String test();
}


TestServiceImpl:


@Service("testService")
public class TestServiceImpl implements TestService {
@Override
public String test() {
return "message from provide";
}
}


xml文件中的 ref="testService" 很重要,后面consume需要通过这个来进行RPC访问。

Consume

Dubbo配置类:

/**
* Created by csonezp on 2017/9/14.
*/
@Configuration
@PropertySource("classpath:dubbo/dubbo.properties")
@ImportResource({ "classpath:dubbo/*.xml" })
public class DubboConfig {
}


在resources下新建dubbo目录,添加dubbo-consume.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<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="${dubbo.application.name}"/>

<dubbo:registry protocol="${dubbo.registry.protocol}" address="${dubbo.registry.address}"/>

<dubbo:reference id="testService" interface="com.csonezp.TestService"/>
</beans>


这个id 就是Provide里设置的ref,不要错了;

dubbo.properties文件:

#应用名称
dubbo.application.name=example-consume
#注册中心类型
dubbo.registry.protocol=zookeeper
#注册中心地址
dubbo.registry.address=127.0.0.1:2181


TestService:

/**
* Created by csonezp on 2017/9/14.
*/
public interface TestService { String test(); }


仅需要一个接口,不需要实现,通过远程调用来调用Provide的具体实现;

TestController:具体测试入口,调用远程Provide的实现:

@RestController
public class TestController {

@Autowired
TestService testService;
@RequestMapping("/test")
public Object test() {
return testService.test();
}
}


还需要修改一下consume的端口,防止冲突,在consume的application.properties加入:

server.port=8081


现在将Provide和Consume都启动,然后访问 localhost:8081/test,这时会得到:



可知项目已经正确的执行了远程调用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐