1 dubbo是什么
- 一款高性能的Java RPC框架
- 一款简单、易用的Java RPC框架
- 一款优秀的RPC服务治理框架
- 由阿里贡献的开源RPC框架
- 官网地址: http://dubbo.apache.org/zh-cn/index.html
- github: https://github.com/apache/incubator-dubbo
- 官方学习文档: http://dubbo.apache.org/zh-cn/docs/user/quick-start.html
2 依赖说明
2.1 可以如何使用dubbo
服务提供端:
- 独立的服务(以普通的java程序形式)
- 集成在应用中(在应用中增加远程服务能力)
消费端:
- 在应用中调用远程服务。
- 也可是在服务提供者中调用远程服务。
2.2 dubbo的使用步骤
- 引入dubobo相关依赖
- 配置dubbo框架(提供了3种配置方式)
- 开发服务
- 配置服务
- 启动、调用
2.2.1 引入dubbo相关依赖
<dependencies>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.6</version>
</dependency>
<!-- 这里我们使用netty -->
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.32.Final</version>
</dependency>
</dependencies>
2.2.2 配置dubbo框架
Dubbo 采用全 Spring 配置方式,透明化接入应用,对应用没有任何 API 侵入,只需用 Spring 加载 Dubbo 的配置即可,Dubbo 基于 Spring 的 Schema 扩展进行加载。如果不想使用 Spring 配置,可以通过 API 的方式 进行调用。还可以在spring中基于注解的方式进行配置。
3种配置方式:
- spring schema xml 方式 适用于spring应用
- 注解方式 适用于spring应用, 需要 2.6.3 及以上版本
- API方式 API方式使用范围说明:API 仅用于 OpenAPI, ESB, Test, Mock 等系统集成。普通 服务提供方或消费方,请采用XML 配置方式使用 Dubbo
2.2.2.1 spring Schema XML 方式
服务提供者
示例服务:
服务接口定义(该接口需单独打包,在服务提供方和消费方共享):
DemoService.java
public interface DemoService {
String sayHello(String name);
}
在服务提供方实现接口
DemoServiceImpl.java
public class DemoServiceImpl implements DemoService {
public String sayHello(String name) {
return "Hello " + name;
}
}
用 Spring 配置声明暴露服务 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://dubbo.apache.org/schema/dubbo"
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">
<!-- 提供方应用信息,用于计算依赖关系 -->
<dubbo:application name="hello-world-app" />
<!-- 使用multicast广播注册中心暴露服务地址 -->
<dubbo:registry address="multicast://224.5.6.7:1234" />
<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880" />
<!-- 声明需要暴露的服务接口 -->
<dubbo:service interface="com.study.mike.dubbo.DemoService"
ref="demoService" />
<!-- 和本地bean一样实现服务 -->
<bean id="demoService"
class="com.study.mike.dubbo.provider.DemoServiceImpl" />
</beans>
注意dubbo命名空间的指定,以及配置了哪些项。
启动服务程序(这里是作为独立的java程序启动)
Provider.java:
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Provider {
public static void main(String[] args) throws Exception {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("provider.xml");
context.start();
System.in.read(); // 按任意键退出 }
}
服务消费者
通过 Spring 配置引用远程服务
consumer.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://dubbo.apache.org/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
4.3.xsd
http://www.springframework.org/schema/beans/spring-beans-
http://dubbo.apache.org/schema/dubbo
http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
<!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
<dubbo:application name="consumer-of-helloworld-app" /> <!-- 使用multicast广播注册中心暴露发现服务地址 -->
<dubbo:registry address="multicast://224.5.6.7:1234" />
<!-- 生成远程服务代理,可以和本地bean一样使用demoService -->
<dubbo:reference id="demoService"
interface="com.study.mike.dubbo.DemoService" />
</beans>
加载Spring配置,并调用远程服务
Consumer.java
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.apache.dubbo.demo.DemoService;
public class Consumer {
public static void main(String[] args) throws Exception {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("consumer.xml");
context.start();
DemoService demoService = (DemoService) context.getBean("demoService"); // 获取远程服务代理
} }