快速启动
Dubbo 采用全 Spring 配置方式,透明化接入应用,对应用没有任何 API 侵入,只需用 Spring 加载 Dubbo 的配置即可
服务提供者
首先,让我们创建一个Maven项目取名为dubbo-server。
然后,新建两个模块,同样基于Maven,分别是server-api用于管理对外提供的接口,和dubbo-provider充当服务提供者,并对接口进行实现。
在server-api中定义IHelloService接口:
public interface IHelloService {
String sayHello(String msg);
}
在server-provider中对IHelloService接口进行实现:
注意!在server-provider模块中要引入server-api模块的依赖,否则模块无法连通!!
public class HelloServiceImpl implements IHelloService {
@Override
public String sayHello(String msg) {
return "hello:"+msg;
}
}
在server-provider中引入dubbo相关依赖
<dependency>
<groupId>com.qingmu.dubbo</groupId>
<artifactId>server-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.3</version>
</dependency>
在resource目录下新建dubbo的配置文件,用 Spring 配置声明暴露服务
dubbo-server.xml:
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!-- 提供方应用信息,用于计算依赖关系 -->
<dubbo:application name="dubbo-provider" owner="mic" />
<!-- 使用multicast广播注册中心暴露服务地址 -->
<dubbo:registry address="multicast://224.5.6.7:1234" />
<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880" />
<!-- 声明需要暴露的服务接口 -->
<dubbo:service interface="com.qingmu.dubbo.IHelloService" ref="demoService" />
<!-- 和本地bean一样实现服务 -->
<bean id="demoService" class="com.qingmu.dubbo.HelloServiceImpl" />
</beans>
编写启动类BootStrap.java,加载 Spring 配置
public class BooStrap {
public static void main(String[] args) throws IOException {
ClassPathXmlApplicationContext context=new ClassPathXmlApplicationContext("dubbo-server.xml");
context.start();
System.in.read(); //按任意键退出
}
}
服务消费者
创建消费者端的Maven项目dubbo-client,并引入相关依赖
<dependency>
<groupId>com.qingmu.dubbo</groupId>
<artifactId>server-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.3</version>
</dependency>
通过 Spring 配置引用远程服务
dubbo-client.xml:
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
<dubbo:application name="dubbo-consumer" />
<!-- 使用multicast广播注册中心暴露发现服务地址 -->
<dubbo:registry address="multicast://224.5.6.7:1234" />
<!-- 生成远程服务代理,可以和本地bean一样使用demoService -->
<dubbo:reference id="qmHello" interface="com.qingmu.dubbo.IQmHello"/>
</beans>
加载Spring配置,并调用远程服务
App.java:
public static void main(String[] args) throws Exception{
ClassPathXmlApplicationContext context=
new ClassPathXmlApplicationContext("dubbo-client.xml");
IQmHello iQmHello=(IQmHello)context.getBean("qmHello");
System.out.println(iQmHello.sayHello("Mic"));
}
本节源码:dubbo-server、dubbo-client