项目作者: Jason-HuHu

项目描述 :
dubbo学习demo
高级语言: Shell
项目地址: git://github.com/Jason-HuHu/dubbo-demo.git
创建时间: 2018-01-24T07:47:07Z
项目社区:https://github.com/Jason-HuHu/dubbo-demo

开源协议:

下载


dubbo-demo

dubbo快速入门

项目结构

  1. dubbo-demo
  2. dubbo-demo-java :采用编程方式使用dubbo
  3. dubbo-demo-xml : 采用注解的方式使用dubbo

快速启动

Dubbo 采用全 Spring 配置方式,透明化接入应用,对应用没有任何 API 侵入,只需用 Spring 加载 Dubbo 的配置即可,Dubbo 基于 Spring 的 Schema 扩展进行加载。

服务提供者

安装服务提供者

  1. 克隆代码 git clone https://github.com/Jason-HuHu/dubbo-demo.git
  2. 修改配置 resource/META-INFO.spring/dubbo-demo-provider.xml 中的dubbo:registery,替换成真实的注册中心地址,推荐使用zookeeper
  3. 启动Provider 运行 dubbo-demo-provider中的com.alibaba.dubbo.demo.provider.Provider

    定义服务接口

    DemoService.java
    ```java
    public interface DemoService {

    String sayHello(String name);

}

  1. ## 在服务提供方实现接口
  2. DemoServiceImpl.java
  3. ```java
  4. public class DemoServiceImpl implements DemoService {
  5. public String sayHello(String name) {
  6. System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] Hello " + name + ", request from consumer: " + RpcContext.getContext().getRemoteAddress());
  7. return "Hello " + name + ", response form provider: " + RpcContext.getContext().getLocalAddress();
  8. }
  9. }

用Spring配置声明暴露服务

dubbo-demo-provider.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
  4. xmlns="http://www.springframework.org/schema/beans"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
  6. http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
  7. <!-- 提供方应用信息,用于计算依赖关系 -->
  8. <dubbo:application name="demo-provider"></dubbo:application>
  9. <!-- 服务注册地址 -->
  10. <dubbo:registry address="zookeeper://127.0.0.1:2181"></dubbo:registry>
  11. <!-- 用dubbo协议在20880端口暴露服务 -->
  12. <dubbo:protocol name="dubbo" port="20880"></dubbo:protocol>
  13. <!-- 和本地bean一样实现服务 -->
  14. <bean id="demoService" class="com.alibaba.dubbo.demo.impl.DemoServiceImpl"></bean>
  15. <bean id="demoServer" class="com.alibaba.dubbo.demo.impl.DemoServerImpl"></bean>
  16. <!-- 声明需要暴露的服务接口 -->
  17. <dubbo:service interface="com.alibaba.dubbo.demo.DemoService" ref="demoService"></dubbo:service>
  18. <dubbo:service interface="com.alibaba.dubbo.demo.DemoServer" ref="demoServer"></dubbo:service>
  19. </beans>

加载Spring配置

Provider.java

  1. public class Provider {
  2. public static void main(String[] args) throws Exception {
  3. ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"META-INF/spring/dubbo-demo-provider.xml"});
  4. context.start();
  5. System.in.read(); // 按任意键退出
  6. }
  7. }

服务消费者

启动服务消费者

  1. 下载代码 git clone https://github.com/Jason-HuHu/dubbo-demo.git
  2. 修改配置 resource/META-INFO.spring/dubbo-demo-consumer.xml 中的 dubbo:registery,替换成Provider提供的注册中心地址
  3. 确保已经启动Provider 运行dubbo-demo-consumer中的com.alibaba.dubbo.demo.consumer.Consumer

    通过Spring配置引用远程服务

    dubbo-demo-consumer.xml
    ```xml
    <?xml version=”1.0” encoding=”UTF-8”?>


  1. ## 加载Spring配置,并调用远程服务
  2. Consumer.java
  3. ```java
  4. public class Consumer {
  5. public static void main(String[] args) {
  6. ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"META-INF/spring/dubbo-demo-consumer.xml"});
  7. context.start();
  8. DemoService demoService = (DemoService) context.getBean("demoService"); // 获取远程服务代理
  9. DemoServer demoServer = (DemoServer) context.getBean("demoServer");
  10. String hello = demoService.sayHello("hello hhhhworld"); // 执行远程方法
  11. hello += demoServer.sayGoodbye("baibai");
  12. System.out.println(hello); // 显示调用结果
  13. try {
  14. System.in.read();
  15. } catch (IOException e) {
  16. e.printStackTrace();
  17. }
  18. }
  19. }