快速启动

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

如果不想使用 Spring 配置,可以通过 API 的方式 进行调用。

服务提供者

完整安装步骤,请参见:示例提供者安装

定义服务接口

DemoService.java [1]

  1. package org.apache.dubbo.demo;
  2. public interface DemoService {
  3. String sayHello(String name);
  4. }

在服务提供方实现接口

DemoServiceImpl.java [2]

  1. package org.apache.dubbo.demo.provider;
  2. import org.apache.dubbo.demo.DemoService;
  3. public class DemoServiceImpl implements DemoService {
  4. public String sayHello(String name) {
  5. return "Hello " + name;
  6. }
  7. }

用 Spring 配置声明暴露服务

provider.xml:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
  6. <!-- 提供方应用信息,用于计算依赖关系 -->
  7. <dubbo:application name="hello-world-app" />
  8. <!-- 使用multicast广播注册中心暴露服务地址 -->
  9. <dubbo:registry address="multicast://224.5.6.7:1234" />
  10. <!-- 用dubbo协议在20880端口暴露服务 -->
  11. <dubbo:protocol name="dubbo" port="20880" />
  12. <!-- 声明需要暴露的服务接口 -->
  13. <dubbo:service interface="org.apache.dubbo.demo.DemoService" ref="demoService" />
  14. <!-- 和本地bean一样实现服务 -->
  15. <bean id="demoService" class="org.apache.dubbo.demo.provider.DemoServiceImpl" />
  16. </beans>

加载 Spring 配置

Provider.java:

  1. import org.springframework.context.support.ClassPathXmlApplicationContext;
  2. public class Provider {
  3. public static void main(String[] args) throws Exception {
  4. ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"http://10.20.160.198/wiki/display/dubbo/provider.xml"});
  5. context.start();
  6. System.in.read(); // 按任意键退出
  7. }
  8. }

服务消费者

完整安装步骤,请参见:示例消费者安装

通过 Spring 配置引用远程服务

consumer.xml:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
  6. <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
  7. <dubbo:application name="consumer-of-helloworld-app" />
  8. <!-- 使用multicast广播注册中心暴露发现服务地址 -->
  9. <dubbo:registry address="multicast://224.5.6.7:1234" />
  10. <!-- 生成远程服务代理,可以和本地bean一样使用demoService -->
  11. <dubbo:reference id="demoService" interface="org.apache.dubbo.demo.DemoService" />
  12. </beans>

加载Spring配置,并调用远程服务

Consumer.java [3]

  1. import org.springframework.context.support.ClassPathXmlApplicationContext;
  2. import org.apache.dubbo.demo.DemoService;
  3. public class Consumer {
  4. public static void main(String[] args) throws Exception {
  5. ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"http://10.20.160.198/wiki/display/dubbo/consumer.xml"});
  6. context.start();
  7. DemoService demoService = (DemoService)context.getBean("demoService"); // 获取远程服务代理
  8. String hello = demoService.sayHello("world"); // 执行远程方法
  9. System.out.println( hello ); // 显示调用结果
  10. }
  11. }

  1. 该接口需单独打包,在服务提供方和消费方共享 ↩︎

  2. 对服务消费方隐藏实现 ↩︎

  3. 也可以使用 IoC 注入 ↩︎