csonezp

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

最近公司的一个分布式系统想要尝试迁移到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,这时会得到:

可知项目已经正确的执行了远程调用。

 

posted on 2017-09-14 11:01  csonezp  阅读(552)  评论(0编辑  收藏  举报